12

簡単なリストがあります。

>>> a = [0, 1, 2]

リスト内包表記を使用して、そこから新しいリストを作成したいと考えています。

>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]

非常に単純ですが、ゼロ以外の要素のみを操作したい場合はどうすればよいでしょうか?

「if」にはリスト内包表記で「else」が必要なので、これを思いつきました。

>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]

しかし、望ましい結果は.

>>> b
[2, 4]

私はこのようにそれを行うことができます

>>> a = [0, 1, 2]
>>> def f(arg):
...     for x in arg:
...         if x != 0:
...             yield x*2
... 
>>> list(f(a))
[2, 4]

または「フィルター」とラムダを使用する

>>> a = [0, 1, 2]
>>> list(filter(lambda x: x != 0, a))
[1, 2]

リスト内包表記を使用してこの結果を取得するにはどうすればよいですか?

4

2 に答える 2

22
b = [x*2 for x in a if x != 0]

条件を最後に置く場合は、else は必要ありません (実際、そこに else を含めることはできません)。

于 2014-06-27T00:00:11.490 に答える
8

パターンに従ってください:

[ <item_expression>
  for <item_variables> in <iterator>
  if <filtering_condition>
]

次のように解決できます。

>>> lst = [0, 1, 2]
>>> [num
... for num in lst
... if num != 0]
[1, 2]

それはすべて、「ゼロ以外」の値をテストする if 条件を形成することです。

于 2014-06-27T00:01:58.213 に答える