Я хочу сравнить 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] не будет работать. Как правильно, если я хочу сделать что-то подобное?

2
Vogelsire 30 Янв 2013 в 12:11

7 ответов

Лучший ответ

Вы можете использовать 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
7
root 30 Янв 2013 в 08:21

Или вы можете сделать что-то вроде этого:

[ a for a,b in zip(ListA,ListB) if b==True ]
1
Rapptz 30 Янв 2013 в 08:43

Если вы хотите сравнить каждый элемент ListA с соответствующим элементом ListB (другими словами, элементы с одинаковыми номерами индексов), вы можете использовать цикл for, который перебирает индекс numbers , а не повторяет поверх фактических элементов одного списка. Ваш код будет таким:

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
1
user1516849 30 Янв 2013 в 08:44

Вы можете перебирать списки таким образом.

for a, b in zip(ListA, ListB):
    pass
7
Ifthikhan 30 Янв 2013 в 08:13

Вы можете использовать перечислять.

Смотрите вот этот пример:

http://codepad.org/sJ31ytWk

1
Tuim 30 Янв 2013 в 08:15

Попробуй это

for name,value in itertools.izip(ListA, ListB):
    if value == True:
        print "Its true"
1
Mirage 30 Янв 2013 в 08:41

Попробуй это:

for item, have_it in zip(ListA, ListB):
    if have_it:
        print "I have item", item
1
Ber 30 Янв 2013 в 08:15