この質問は、2 つの python ループを同時に実行するにはどうすればよいですか?に密接に関連しています。
より明確に言えば、上記のリンクで質問者が尋ねていることを取得します。
for i in [1,2,3], j in [3,2,1]:
print i,j
cmp(i,j) #do_something(i,j)
しかし
L1: [1,2,3] の i と [3,2,1] の j の場合: 動作しません
Q1. しかし、ここで起こったことは面白いものでした:
for i in [1,2,3], j in [3,2,1]:
print i,j
[1, 2, 3] 0
False 0
Q2. L1 のようなものを機能させるにはどうすればよいですか?
マルチスレッドや並列処理ではありません。(ループ内のループではなく、2 つの同時タスクです)、2 つの結果を比較します。
ここでは、リストは数字でした。私のケースは数字ではありません:
for i in f_iterate1() and j in f_iterate2():
更新: 以下の abarnert は正しかったです。j をどこかで定義しました。したがって、次のようになります。
>>> for i in [1,2,3], j in [3,2,1]:
print i,j
Traceback (most recent call last):
File "<pyshell#142>", line 1, in <module>
for i in [1,2,3], j in [3,2,1]:
NameError: name 'j' is not defined
そして、2 つの反復関数を圧縮するつもりはありません。ただし、for ループのような状況でそれらを同時に処理します。問題は、Pythonでどのように達成できるかということです。
更新 #2: 同じ長さのリストで解決
>>> def a(num):
for x in num:
yield x
>>> n1=[1,2,3,4]
>>> n2=[3,4,5,6]
>>> x1=a(n1)
>>> x2=a(n2)
>>> for i,j in zip(x1,x2):
print i,j
1 3
2 4
3 5
4 6
>>>
【解決済み】
Q3. n3=[3,4,5,6,7,8,78,34] で、n1,n2 の両方より大きい場合はどうでしょうか。zip はここでは機能しません。izip_longest のようなものですか? izip_longest は十分に機能します。