94

Pythonでこれを1行で行うことは可能ですか?

if <condition>:
    myList.append('myString')

三項演算子を試しました:

myList.append('myString' if <condition>)

しかし、私のIDE(MyEclipse)は、else.

4

7 に答える 7

137

はい、これを行うことができます:

<condition> and myList.append('myString')

が false の場合<condition>、短絡が発生し、右側は評価されません。が true の場合<condition>、右側が評価され、要素が追加されます。

上記を行うことは非常に非Pythonicであることを指摘しておきます。おそらく、これを書くのが最善でしょう。

if <condition>: myList.append('myString')

デモンストレーション:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
于 2012-08-30T15:05:19.817 に答える
51

言語で構文を使用できない理由

variable = "something" if a_condition

それがなく、急にわからなくelseなった場合。おそらく、デフォルトで になる可能性がありますが、Python では、すべての変数の割り当てが実際には明示的な割り当てになる必要があります。これは、関数に渡された値が代入ステートメントのRHSと同じように評価されるため、関数呼び出しなどの場合にも当てはまります。a_condition == FalsevariableNone

同様に、すべてreturnの s は、条件付きの s であっても、実際には返さなければなりませんreturn。例えば:

return variable if a_condition

は許可されていませんが、

return variable if a_condition else None

2 番目の例は明示的に何かを返すことが保証されているためです。

于 2012-08-30T14:59:11.573 に答える
13
if <condition>: myList.append('myString')

そうでなければ、いいえ。なぜ1行にまとめる必要があるのですか?

「三項演算子」は operator であることに注意してください。他の演算子と同様に、何かを返す必要がありますelse。条件が true-like でない場合、何を返すことになっていますか?

于 2012-08-30T14:57:47.317 に答える
11

あなたは基本的にコンストラクトを求めて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
于 2018-07-10T09:30:18.443 に答える
3

myList.extend(['myString'] if condition else [])他のソリューションよりも手間がかかりますが、これも機能します。

于 2012-08-30T15:21:42.473 に答える