2016-12-07 5 views
-1
input_shape = tuple([i for i in input_shape if i is not None]) 

私はPythonには新しく、そこで何が起こっているのか理解していません。 私が見る通り、Cint a = 5 > 2 ? val1 : val2;のアナログにすることは可能ですが、わかりません。以下のリストの理解の説明は何ですか?

小さな部分で分けて分かりように分かりましたが、まだ分かりません。 (ここではNoneです)テストは、ループによってスキップされます失敗

i // this is already wrong for being single 
for i in input_shape //that's correct for cicle 
    if i is not None //ugh... so, and what if? 
+0

テストに失敗した項目(ここでは「なし」)はループによってスキップされます。 – spectras

+0

私はありませんなし項目を追加します。 – Backtrack

答えて

1

あなたはなかったですほとんどあなたの分離でそこに。あなたが間違っていると指摘した表情(内側の部分)は(i)、実際に内部に入ります。そしてそれはそれがブラケットの中にあることによって表現されます[];それらのものをリストに入れます。スペクトラの答えは、このリストを保持するために変数を使ってどのように動作するかを示しています。構成はlist comprehensionと呼ばれます。

+0

これを説明していただきありがとうございます。私はドキュメントを読んでおり、特にこのような 'list comprehension'の例の下に' 'より簡潔で**読みやすい** 'というフレーズが好きです:D – Kosmos

3

アイテム:そのような 。

input_shape = tuple([i for i in input_shape if i is not None]) 

# Roughly equivalent to  

result = [] 
for i in input_shape: 
    if i is not None: 
     result.append(i) 
input_shape = tuple(result) 

概念的には同じですが、リストの理解は、ループがインタープリタによって内部的に実行されるほど速くなります。また、明らかに、周囲に変数resultが残ることはありません。

+0

これは、リストの理解がどのように機能し、受け入れられるべきかを実際に説明する最も完全な答えです。 –

+0

@AhsanulHaque - 私のような、それがどのように動作するのか完全に理解していない人のために、Yann Vernierの答えは実際にそのような構造を読む方法を説明したので、より有用でした。彼は、すべてのことを理解するには、「条件」の下で最初に「私」を動かす必要があると説明した。他のすべての答えは、それを読む方法を説明するのではなく、結果が何であるかを単に伝えるだけです。 – Kosmos

1

i for iの部分は、何でもよいが、x for x,y for y、またはさらにKosmos for Kosmosとすることができる。

>>> input_shape = [1, 2, 3] 
>>> input_shape = tuple([i for i in input_shape if i is not None]) 
>>> input_shape 
(1, 2, 3) 

ここでわかりますように、私のリストはタプルに変換され、各項目をループします。その@spectrasが指摘したように、私は

1
input_shape = [1,2,3,None,5,1] 
print(input_shape) 
input_shape = tuple([i for i in input_shape if i is not None]) 
print(input_shape) 

O/P

[1, 2, 3, None, 5, 1] 
(1, 2, 3, 5, 1) 

それを説明するタフな時間を過ごしていて、リスト内包と呼ばれる事に

見て、テストに不合格項目(ここではNoneです)はループによってスキップされます。

1

次はlist comprehensionです:

[i for i in input_shape if i is not None] 

それはあなたがタプルしたリストを変換するtuple()を呼び出し、その後None

でない要素のみを返します。

あなたは以下のような普通のforループを使用して同じ結果を得ることができます:今

input_shape = [1, 2, None, 'a', 'b', None] 
result = [] 

for i in input_shape: 
    if i is not None: 
     result.append(i) 

print(result) 
# Output: [1, 2, 'a', 'b'] 

、我々はこのようtupleresult(タイプlistの)変換:

final_result = tuple(result) 
print(final_result) 
# Output: (1, 2, 'a', 'b') 
関連する問題