答えて
いいえ、あなたはできません。 Python language reference状態:
複合文は、1つまたはそれ以上の から成る句は ヘッダとから構成され、特定の化合物 文の句 ヘッダが同じであるすべての「節」「スイート」。 インデントレベル。各句ヘッダ は、一意に識別する キーワードで始まり、コロンで終わります。スイート は、 a節によって制御される文のグループです。スイートは、ヘッダーと同じ行にある セミコロンで区切られた簡単なステートメント 、ヘッダーのコロンに続いて 、または は後続の行で1つ以上のインデント付きステートメントにすることができます。 後者の 形式のスイートには、入れ子になった 複合ステートメントを含めることができます。それがこれにif節以下 else節が属します明らか ではありません主な理由は以下のは、違法 です:
if test1: if test2: print x
は確かに、Pythonは上記のネストされたIFSのため
SyntaxError
を生成します。
for
がインデントなしの文が続いているとき、その文だけ
simple_stmt
インスタンスを許可
stmt_list
、でなければならないことを
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
注:より正式for
については、これは、Pythonでの文法です。 simple_stmt
はこれです:if
とfor
様化合物のステートメントが含まれていません
simple_stmt ::= expression_stmt
| assert_stmt
| assignment_stmt
| augmented_assignment_stmt
| pass_stmt
| del_stmt
| print_stmt
| return_stmt
| yield_stmt
| raise_stmt
| break_stmt
| continue_stmt
| import_stmt
| global_stmt
| exec_stmt
。
つまり、Pythonの構文は明快さを目指しています。したがって、このようなステートメントをネストしないほうがいいです。これはジェネレーター/リストの理解が行われたものです。あなたの計算が1行分のシンプルなものであると考えるなら、あなたのための理解があります。それ以外の場合は、すべての行を1行にまとめることでコードを混乱させたくありません。字下げでうまく分割してください。いくつかの余分な回線は、最近多くの費用がかかりません。
私は彼が1つの行に2つのステートメントを置くことができるかどうか尋ねていたとは思わない。私は彼が、これらの2つのステートメントの全体的な効果を1行に出すことを望んでいると思います。 – Gerrat
@Eli:彼はこの例に2行の省略記号をつけているので、 'x'で手続き的に何かをやって、リストの理解を容認できない解決策にしています。 **リスト内包はループを単一のoneliner **にする方法ではありません**。 – delnan
@delnan:そうかもしれない、私は本当に知らない。 OP-intention-interpretationは楽しいSOのゲームではありませんか? :-)私はロベルトが彼が本当に望んでいることを明確にすることを奨励します。 –
あなたはこのように代を想像することができます:
def do_something(value):
...
def do_otherthing(value):
...
for x in t: do_something(x) if x>3 else do_otherthing(x)
それはまさに彼が求めていなかったものです: "リストの理解なし" –
もう一度質問をお読みください。 –
質問はこれを特に質問しません - '...'がいくつかのステートメントであるため、リストの理解は非慣用的なものになります。 – delnan
はい
フィルタにおけるxの(ラムダI:> 3、VEC):
Python 2では、値を遅延的に生成するのではなく、即座に新しいリストを作成します。 – delnan
http://docs.python.org/library/itertools.html#itertools.ifilter –
参照@KennyTM ...それだけ圧縮する理由はありません。
言われて何、for x in (i in vec if i > 3)
は仕事だけでなく、itertools.ifilter
を行います(または単に組み込みfilter
Pythonの3中)lambda x: x > 3
述語を持ちます。これらはすべてのイテラブルでも動作し、怠け者です(ループ中にbreak
を指定した場合は、1つのアイテムをあまりにも多くチェックしませんでした)。
コメントに記載されているOPのように、「* x *が大文字の場合は、入力する必要があります(毛髪を引っ張る瞬間)、おそらく 'フィルター' + 'ラムダ 'がこの質問に対する適切な答えです。 – tzot
- 1. のPython - リスト内包表記
- 2. リスト内包表記内の「elif」
- 3. パイソン - タプルとリストの内包表記は
- 4. リストの内包表記の混乱
- 5. リスト内包表記の適切な使用 - python
- 6. リスト内包表記の奇妙な動作
- 7. リストの内包表記 - ネストされたリスト
- 8. ハスケル - タプルのリストでリスト内包表記([A])
- 9. Pythonのリストの並べ替え要素(リストの内包表記)
- 10. ORとELSEはリスト内包表記で似ています
- 11. リスト内包表記に中間データ構造が作成されています
- 12. リスト内包に
- 13. Pythonのリスト内包表記:2次元配列
- 14. Pythonで連結リスト内包表記を使用する
- 15. 2つのリスト内包表記を結合する
- 16. リスト内包表記で「または」を使用する
- 17. Pythonのリスト内包1つの宣言と2つの内包
- 18. リスト内包表記を使用してオブジェクトにリストを埋め込む
- 19. Python:リスト内包表記を使用してサブストリングのリストでリストをフィルタリングする
- 20. リスト内包表記の中に辞書があるかどうかチェックする
- 21. アンラッピングオプションの再生ルートパラメーターの内包表記
- 22. データが複数のリストに含まれているときのリスト内包表記
- 23. リスト内包、
- 24. はリスト内包
- 25. リスト内包
- 26. リスト内包エラー
- 27. Actionscript3はリスト内包表記やラムダ計算を提供していますか?
- 28. リスト内包表記でインデックス内の項目を抜き取ります
- 29. Pythonのリスト内包エラーが
- 30. リスト内包表記を持つif文を入れ子にした
なぜですか? /なぜ1行ですか? – kennytm
私はそれにあまり慣れていませんが、ここで 'lambda'ステートメントが適切でしょうか? – Blender
@blender: 'ラムダ 'だけではナンセンスはありません。 'i-/filter'の述語として、はい。 – delnan