リスト内包表記で次のようにするにはどうすればよいですか?
test = [["abc", 1],["bca",2]]
result = []
for x in test:
if x[0] =='abc':
result.append(x)
else:
pass
result
Out[125]: [['abc', 1]]
1を試してください:
[x if (x[0] == 'abc') else pass for x in test]
File "<ipython-input-127-d0bbe1907880>", line 1
[x if (x[0] == 'abc') else pass for x in test]
^
SyntaxError: invalid syntax
2を試してください:
[x if (x[0] == 'abc') else None for x in test]
Out[126]: [['abc', 1], None]
3を試してください:
[x if (x[0] == 'abc') for x in test]
File "<ipython-input-122-a114a293661f>", line 1
[x if (x[0] == 'abc') for x in test]
^
SyntaxError: invalid syntax
if
は末尾に置く必要があり、リスト内包にpass
は必要ありません。アイテムは、if
条件が満たされた場合にのみ追加されます。そうでない場合、要素は無視されるため、pass
はリスト内包構文に暗黙的に実装されます。
[x for x in test if x[0] == 'abc']
完全を期すために、このステートメントの出力は次のとおりです。
[['abc', 1]]
Jacoの答えを補足するものとして。あなたが基本的に欲しいのはfilteringリストなので、filter
コマンドについて知っておくのはいいことです:
_filter( lambda x: x[0]=='abc', test)
_
これは次を返します:
filter
関数をlist()
コンストラクタでラップするだけです。