web-dev-qa-db-ja.com

else passで理解度をリストする

リスト内包表記で次のようにするにはどうすればよいですか?

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
17
WoodChopper

ifは末尾に置く必要があり、リスト内包にpassは必要ありません。アイテムは、if条件が満たされた場合にのみ追加されます。そうでない場合、要素は無視されるため、passはリスト内包構文に暗黙的に実装されます。

[x for x in test if x[0] == 'abc']

完全を期すために、このステートメントの出力は次のとおりです。

[['abc', 1]]
33
Alex

Jacoの答えを補足するものとして。あなたが基本的に欲しいのはfilteringリストなので、filterコマンドについて知っておくのはいいことです:

_filter( lambda x: x[0]=='abc', test)
_

これは次を返します:

  • Python 2のリスト
  • python3のジェネレーター(後でメモリに負担をかけずに結果を処理できるため、非常に長いリストに役立つ場合があります)。それでもリストが必要な場合は、上記のfilter関数をlist()コンストラクタでラップするだけです。
6
Thomas Baruchel