それはpythonのリスト内包構文に関するものです。与えられた範囲の奇数のリストを生成するリスト内包表記があります。
[x for x in range(1, 10) if x % 2]
これはフィルタを作る - 偶数を削除するソースリストを持っている(if x % 2
)。ここではif-then-elseのようなものを使いたいのですが。次のコードは失敗します。
>>> [x for x in range(1, 10) if x % 2 else x * 100]
File "<stdin>", line 1
[x for x in range(1, 10) if x % 2 else x * 100]
^
SyntaxError: invalid syntax
If-elseのようなpython式があります。
1 if 0 is 0 else 3
リスト内包内でそれを使用する方法?
x if y else z
は、各要素に対して返す式の構文です。したがって、あなたは必要です:
[ x if x%2 else x*100 for x in range(1, 10) ]
最初の例ではフィルタを使用していますが、2番目の例では使用していないため、混乱が生じます。 2番目の例では、三項演算子式を使用して、それぞれの値を別の値にマッピングしているだけです。
フィルタを使用すると、次のものが必要になります。
[ EXP for x in seq if COND ]
フィルターなしであなたは必要とします:
[ EXP for x in seq ]
そしてあなたの2番目の例では、式は "複雑な"式で、if-else
を含みます。
[x if x % 2 else x * 100 for x in range(1, 10) ]
もう1つの解決策は、誰かがそれを好むことを願っています:
使用方法:[False、True] [式]
>>> map(lambda x: [x*100, x][x % 2 != 0], range(1,10))
[1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>
あなたはリスト内包表記でもそれをすることができます:
A=[[x*100, x][x % 2 != 0] for x in range(1,11)]
print A
これができました
>>> [x if x % 2 != 0 else x * 100 for x in range(1,10)]
[1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>