ListA[0]とListB[0]...などを比較したい。
ListA = [itemA, itemB, itemC]
ListB = [true, false, true]
for item in ListA:
if ListB[item] == True:
print"I have this item"
現在の問題は、[item]が数値ではないため、ListB[item]が機能しないことです。このようなことをしたい場合の正しい方法は何ですか?
この方法でリストを反復処理できます。
for a, b in zip(ListA, ListB):
pass
あなたが使用することができますitertools.compress
:
Docstring:
compress(data, selectors) --> iterator over selected data
Return data elements corresponding to true selector elements.
Forms a shorter iterator from selected data elements using the
selectors to choose the data elements.
In [1]: from itertools import compress
In [2]: l1 = ['a','b','c','d']
In [3]: l2 = [True, False, True,False]
In [4]: for i in compress(l1,l2):
...: print 'I have item: {0}'.format(i)
...:
I have item: a
I have item: c
または、次のようなことを行うことができます。
[ a for a,b in zip(ListA,ListB) if b==True ]
これを試して:
for item, have_it in zip(ListA, ListB):
if have_it:
print "I have item", item
これを試して
for name,value in itertools.izip(ListA, ListB):
if value == True:
print "Its true"
ListAの各要素をListBの対応する要素(つまり、同じインデックス番号の要素)と比較する場合は、1つのリストの実際の要素を反復処理するのではなく、インデックス番号を反復処理するforループを使用できます。 。したがって、コードは次のようになります。(range(len(ListA)-1)は、0からListAの長さまでの数値のリストを提供します。0インデックスであるため、1を引いたものです)
for i in range(len(ListA)-1):
//ListA[i] will give you the i'th element of ListA
//ListB[i] will give you the i'th element of ListB