0

このような一行を書くことは可能ですか: <statement> if <cond> else <statement>. のような意味ではありませんa = 1 if 1 else 2

例:

pそれ自体にリストがあるリストがあります。input を受け取ったとしましょうinputIter。私は次のことをしたいと思います:

for input in inputIter:
    if <condition>: p+=[[input]] # generate new list
    else: p[-1]+=[input] # append to latest list

それから、これをワンライナーにする方法が必要だと思ったので、これを試しました:

for input in inputIter:
    p+=[[input]] if <condition> else p[-1]+=[input]

しかし、これは生成します

Syntax error: invalid syntax               ^

( はどこにありますか=)。回避策はありますか? これが最良の例ではないことは承知しています。私はそれが少し醜く見えるかもしれないことを知っています。しかし、私の意見では、それは読みやすいです。

4

1 に答える 1

3

ステートメントを割り当てに混在させることはできません。

代入はステートメント ( =+=など) です。代入ステートメントには式 ( の右側のすべて=) が含まれていますが、それ自体を式内で使用することはできません。これには特定の理由があります。式での代入は見つけにくいバグにつながります。古典的な例では、等価テスト ( ==) と代入を混同しています。

if x = 0:
    # oops, that wasn't a test..

Python FAQを参照してください。

条件式内で割り当てを切り替えようとしていますが、これは Python では許可されていません。

ifステートメントを使用するだけです。あなたの特定の例では、おそらく次を使用できます:

for input in inputIter:
    if <condition>: 
        p.append([]) # generate new list
    p[-1].append(input)

これは常に最後のネストされたリストに<condition>追加されますが、新しい空のリストが最初に最後に追加される場合。

于 2014-03-15T16:57:34.213 に答える