Pythonでこれを1行で行うことは可能ですか?
if <condition>:
myList.append('myString')
私は三項演算子を試しました:
myList.append('myString' if <condition>)
しかし、私のIDE(MyEclipse)は、を付けずにそれを気に入らなかったelse
。
回答:
はい、あなたはこれを行うことができます:
<condition> and myList.append('myString')
<condition>
falseの場合、短絡が発生し、右側は評価されません。<condition>
trueの場合、右側が評価され、要素が追加されます。
上記を行うことは非常に非Python的であり、次のことに関係なく、これを書くのがおそらく最善であることを指摘しておきます。
if <condition>: myList.append('myString')
デモンストレーション:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
したがって、非pythonic ...;)
x = object.get('attribute')
、その場合には
言語で構文の使用が許可されていない理由
variable = "something" if a_condition
それがなければ、が突然不明else
になった場合。デフォルトでに設定できるかもしれませんが、Pythonでは、すべての変数の割り当てが実際に明示的な割り当てになる必要があります。これは、関数呼び出しなどの場合にも当てはまります。関数に渡される値は、代入ステートメントのRHSと同じように評価されるためです。a_condition == False
variable
None
同様に、return
条件付きreturn
のsであっても、すべてのsは実際に戻る必要があります。例えば:
return variable if a_condition
許可されていませんが
return variable if a_condition else None
2番目の例は明示的に何かを返すことが保証されているため、許可されます。
variable=None
完全に合法であるということは決してありません。:D
continue if i == 0
forループで。
else pass?
else pass
三元式はに渡すことができる値を返す必要があるため、は機能しませんreturn
。pass
は有効なreturn
値ではありません。
if a_condition: variable = "something"
それif a_condition: return variable
が合法であることを考えると、同意しません。したがって、これは本質的にPythonの任意の構文上の選択です。
基本的にdo_thing() if <condition> else pass
コンストラクトを要求しています(実行するとスローされSyntaxError
ます)。私が(やや)同様の質問の 調査中に発見したdo_thing() if condition else None
ように、あなたが得ることができる限り近いです(これはちょうど別の方法です<condition> and do_thing()
)。したがって、このアイデアと他の回答を要約すると、次のオプションがあります。
if <condition>: myList.append('myString')
—最も「ハッキー」な(したがって好ましい)方法のようです<condition> and myList.append('myString')
myList.append('myString') if <condition> else None
myList.extend(['myString'] if condition else [])
他のソリューションよりも多くの作業が必要ですが、これも機能します。
あなたはこのようなことをすることができます:
myList.append('myString') if <condition> else False
または
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
だと思いますが、何も割り当てていないのであれば、問題ではありません。私はこの人が同様の論理でリスト内包を試みているのではないかと心配しています。
条件に基づいてオプションの要素をリストに追加したい場合は、これを実行します。
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
これは、条件が満たされない場合に値をNoneに置き換えるだけで、後で、None値なしでリストを再定義するだけです。このようにして、条件が満たされた場合にインデックスを保持します