2

リストを印刷すると、このメソッドを使用すると構文エラーが発生しました。

print i for i in [1,2,3]

この方法を使用すると、これで問題ないことがわかりました。

for i in [1, 2, 3]:
    print i

そして私はそれを知っていました

(i for i in [1, 2, 3])

ジェネレーターオブジェクトですが、その理由がわかりません

print i for i in [1, 2, 3] 

動作しません。誰でも私に手がかりを与えることができますか?

4

6 に答える 6

7

リスト内包表記の構文では、括弧で囲むx for x in ... 必要があります。これはPythonの構文規則であり、インデントを要求したり、後にコロンを要求したりするのと同じifです。 i for i in [1, 2, 3]それ自体は有効な構文ではありません。[i for i in [1, 2, 3]](リスト内包表記の場合)または(i for i in [1, 2, 3])(ジェネレーター内包表記の場合)のいずれかが必要です。

于 2012-12-20T08:11:51.323 に答える
2

リスト内包構文( )は、リストを作成する[expression for loop]ための省略形のループ構文です。

リストを作成しているのではなく、アイテムをループで印刷したい。Pythonリストを作成していないため、通常のループを使用する必要があります。

または、アイテムを別々の行に印刷するだけなので、自分で改行を追加するだけです。

print '\n'.join(i for i in [1, 2, 3])

これにより、次と同じ出力が生成されます。

for i in [1, 2, 3]:
    print i

Python 3を使用する場合、またはfrom __future__ import printモジュールの上部で使用してprint() 関数を使用する場合は、1回の呼び出しですべての値を関数に送信しprint()、その間に改行を使用するように指示できます。

values = [1, 2, 3]
print(*values, sep="\n")
于 2012-12-20T08:15:32.087 に答える
2

Python 2 ではprint、式や関数ではなくステートメントであるため、内包表記で直接使用することはできません。このトリックを使用します。

def f(x): print x
[f(i) for i in [1,2,3]]

これは、反復した場合に(f(i)...)呼び出すジェネレーターを作成するだけなので、機能しないことに注意してください。f()リスト内包[]表記は実際に を呼び出しますf()

[編集] Python > 2.6 を使用している場合は、次を使用して同じことを達成できます。

from __future__ import print_function
[print(i) for i in [1, 2, 3]]

()への引数の周りに注意してくださいprint

于 2012-12-20T08:14:23.953 に答える
1

Print は関数ではなくステートメントであり、式に含めることはできません。リスト内包表記が行うリストを作成したくないので、通常のループを使用してください。理論的には、次のことができます(そうすべきではありません):

from __future__ import print_function
[print(my_item) for my_item in [1,2,3,4]]


1
2
3
4
Out[26]:
[None, None, None, None]
于 2012-12-20T08:24:05.373 に答える
1

expression(文法で)として:

  • [i for i in [1, 2, 3]]リスト内包表記です。
  • (i for i in [1, 2, 3])ジェネレータ式です。
  • しかしi for i in [1, 2, 3]、それ自体が構文エラーであり、その通りです。周りに何かあるはずです。(あなたがそれを持っていない限り、その時点でキーワードが有効ではないため、[有効ではありません。expressionfor

print ステートメント内では、expression.

(注意事項func(i for i in [1, 2, 3])として、最初の引数がジェネレーター式である関数呼び出しである式として許可されています。)

于 2012-12-20T08:12:46.097 に答える
1

これは無効な Python 構文です。はi for i in [1, 2, 3]、リストまたはジェネレータ内包表記でのみ有効です。[]またはで囲まれて()います。

以下を使用します。

print '\n'.join(str(i) for i in [1, 2, 3])
于 2012-12-20T08:13:55.293 に答える