2

Python デバッガーまたは django シェルで単一行の for ループを作成するのは簡単です。

>>>> for x in (1,2,3,4):print(x);
>>>> for x in Obj.objects.all():something(x);

しかし、そこに 2 番目の for ループを挿入するにはどうすればよいでしょうか?

>>>> for x in (1,2,3,4):print x;for y in (5,6):print x,y;
SyntaxError: invalid syntax

インタラクティブに作業する場合、前のコマンドの上矢印編集があると便利なので、気になります(これは、他のコンテキストで単一行コマンドを使用する試みではありません)。

注: 「印刷」は単なる例です。実際の使用では、オブジェクトを反復処理するか、「for s in Section.objects.all():for j in s.children():print j」などの他のプログラミングまたはデバッグ タスクを実行します。Python 2.7 を使用しています。

4

3 に答える 3

6

リスト内包表記がうまくいかないときのために

for x in (1,2,3,4):print x;exec("for y in (5,6):print x,y;")

また

for s in Section.objects.all():exec("for j in s.children():print j")

時々、このように使用できますitertools.product(ただし、を取得する方法はありませんprint x)

for x, y in itertools.product((1,2,3,4), (5,6)):print x,y)
于 2013-10-22T06:31:54.957 に答える
3

リスト内包表記は、目的を達成するために使用できます。あなたが正確に望むことは不可能です。

>>> [(x, y) for x in (1, 2, 3, 4) for y in (5, 6)]
[(1, 5), (1, 6), (2, 5), (2, 6), (3, 5), (3, 6), (4, 5), (4, 6)]

関連: for ループのネストされた単一行

于 2013-10-22T06:30:48.823 に答える
0

コマンドを最初に置くことになる可能性があります。例えば。

>>> [print("hi") for x in (1, 2, 3, 4) for y in (5, 6)]

ただし、1 つの問題が発生します。最初に関数を呼び出したくない限り、方法はないと思います。例えば。

>>> [doSomething(x, y) for x in (1, 2, 3, 4) for y in (5, 6)]
于 2013-10-26T03:31:12.707 に答える