0

Python の 2 つのリストに対して項目をチェックしたいのですが、これらは再び 1 つの大きなリストに入れられます。私のコードでは、combinedList は大きなリストで、row1 と row2 はサブリストです。

行 1 と行 2 のアイテムを相互にチェックする必要があります。ただし、Python は初めてなので、疑似コードで大まかなアイデアを得ました。同じペアを複数回繰り返さずに、アイテムの 2 つのリストをチェックするための適切なコードはありますか?

row1 = [a,b,c,d,....]
row2 = [s,c,e,d,a,..]

combinedList = [row1 ,row2]

for ls in combinedList:
        **for i=0 ; i < length of ls; i++
            for j= i+1 ; j <length of ls; j++
                do something here item at index i an item at index j**
4

2 に答える 2

1

私はあなたが探していると思いますitertools.product

>>> from itertools import product
>>> row1 = ['a', 'b', 'c', 'd']
>>> row2 = ['s', 'c', 'e', 'd', 'a']
>>> seen = set()             #keep a track of already visited pairs in this set
>>> for x,y in product(row1, row2):
        if (x,y) not in seen and (y,x) not in seen:
            print x,y
            seen.add((x,y))
            seen.add((y,x))
...         
a s
a c
a e
a d
a a
b s
b c
b e
b d
b a
c s
c c
c e
c d
d s

アップデート:

>>> from itertools import combinations
>>> for x,y in combinations(row1, 2):
...     print x,y
...     
a b
a c
a d
b c
b d
c d
于 2013-07-04T09:07:30.603 に答える
0

zip()組み込み関数を使用して、2 つのリストの値をペアにします。

for row1value, row2value in zip(row1, row2):
    # do something with row1value and row2value

代わりに、row1 の各要素を row2 の各要素 (2 つのリストの積) と結合する場合は、itertools.product()代わりに次を使用します。

from itertools import product

for row1value, row2value in product(row1, row2):
    # do something with row1value and row2value

zip()len(shortest_list)アイテムを生成するリストを単純にペアにし、product()1 つのリストの各要素を別のリストの各要素とペアにして、len(list1)timeslen(list2)アイテムを生成します。

>>> row1 = [1, 2, 3]
>>> row2 = [9, 8, 7]
>>> for a, b in zip(row1, row2):
...     print a, b
... 
1 9
2 8
3 7
>>> from itertools import product
>>> for a, b in product(row1, row2):
...     print a, b
... 
1 9
1 8
1 7
2 9
2 8
2 7
3 9
3 8
3 7
于 2013-07-04T09:06:06.510 に答える