2017-06-15 7 views
3

for、any ideasのifを続行/パスするトリックを見つけることができませんでしたか?解決策として明示的なループを提供しないでください。それは1つのライナーのすべてでなければなりません。 Python用のインラインでelseを続ける

は私が合格し、継続してコードをテストしただけ...もし私の裁判の

list_num=[1,3] 
[("Hola" if i == 1 else continue) for i in list_num] 

出力:あなたは、リスト内の各アイテムを交換することができます

[("Hola" if i == 1 else continue) for i in list_num] 
            ^
SyntaxError: invalid syntax 


File "<stdin>", line 1 
    [("Hola" if i == 1 else pass) for i in list_num] 
           ^
SyntaxError: invalid syntax 



File "<stdin>", line 1 
    [(if i == 1: "Hola") for i in list_num] 
^
SyntaxError: invalid syntax 
+0

あなたは三項演算の結果として、「続ける」を返すしている:Pythonはあなたが理解して単一ifステートメントを使用できるようにすることで、そのようにするための特別な構文を提供しますので、リストから項目をフィルタリングすること、一般的なイディオムであります。 B else Cが三項演算子ならば、Bを評価し、真ならAを、そうでなければCを返します。 –

+0

条件式*式では*ステートメント*を使用できません。 – vaultah

答えて

5

>>> ['hola' if i == 1 else '' for i in list_num] 
['hola', ''] 

条件が満たされたときに置き換えます。

>>> ['hola' for i in list_num if i == 1] 
['hola'] 
+1

また、置き換えのために、私はこの代替案を提供したいと思います: '[hola" *(i == 1)i for list_num] ' – Peri461

+0

恐ろしいです!あなたの答えをありがとう、2番目はまさに私が望んでいたものです。 – chuseuiti

1

ガードをリスト内包表に追加する場合は、最後に行います。

list_num=[1,3] 
["Hola" for i in list_num if i == 1] 
0

あなたはリスト内包にフィルタリング機能を使用する必要があります。それはガードされるので、何else句はありません。次の例を考えてみましょう:

['Hola' for i in list_num if i == 1] 
2

三項演算子はまだ演算子であり、したがって、返すための式が必要であることを覚えておくことが重要です。したがって、continuepassなどのステートメントは使用できません。彼らは表現ではありません。

しかし、あなたのリスト内のステートメントを使用することは、とにかくまったく必要ありません。実際には、三項演算子も必要ありません。

>>> list_num = [1, 3] 
>>> ["Hola" for i in list_num if i == 1] 
['Hola'] 
>>> 
関連する問題