Подтвердить что ты не робот

Поиск элементов не в списке

Итак, мой код:

item = [0,1,2,3,4,5,6,7,8,9]

for item in z:
    if item not in z:
        print item

Z содержит список целых чисел. Я хочу сравнить элемент с Z и распечатать числа, которые не находятся в Z по сравнению с элементом. Я могу распечатать элементы, которые находятся в Z, когда сравниваются не элементы, но когда я пытаюсь сделать противоположное, используя код выше, ничего не печатает.

Любая помощь?

4b9b3361

Ответ 1

Ваш код не делает то, что, как вы думаете, он делает. Строка for item in z: будет проходить через z, каждый раз делая item равным одному элементу z. Первоначальный список item поэтому перезаписывается, прежде чем вы что-нибудь с ним сделали.

Я думаю, вам нужно что-то вроде этого:

item = [0,1,2,3,4,5,6,7,8,9]

for element in item:
    if element not in z:
        print element

Но вы можете легко сделать это так:

set(item) - set(z)

Ответ 2

>> items = [1,2,3,4]
>> Z = [3,4,5,6]

>> print list(set(items)-set(Z))
[1, 2]

Ответ 3

list1 = [1,2,3,4]; list2 = [0,3,3,6]

print set(list2) - set(list1)

Ответ 4

Использование списка:

print [x for x in item if x not in Z]

или с помощью функции фильтра:

filter(lambda x: x not in Z, item)

Использование set в любой форме может создать ошибку, если проверяемый список содержит неповторимые элементы, например:

print item

Out[39]: [0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print Z

Out[40]: [3, 4, 5, 6]

set(item) - set(Z)

Out[41]: {0, 1, 2, 7, 8, 9}

vs понимание списка, как указано выше

print [x for x in item if x not in Z]

Out[38]: [0, 1, 1, 2, 7, 8, 9]

или функция фильтра:

filter(lambda x: x not in Z, item)

Out[38]: [0, 1, 1, 2, 7, 8, 9]

Ответ 5

Если вы запустите цикл, беря элементы из z, как вы ожидаете, что они не будут в z? ИМХО было бы более разумно сравнивать элементы из другого списка с z.

Ответ 6

>>> item = set([0,1,2,3,4,5,6,7,8,9])
>>> z = set([2,3,4])
>>> print item - z
set([0, 1, 5, 6, 7, 8, 9])

Ответ 7

Нет, z undefined. item содержит список целых чисел.

Я думаю, что вы пытаетесь сделать это:

#z defined elsewhere
item = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in item:
  if i not in z: print i

Как было сказано в других ответах, вы можете попробовать использовать наборы.

Ответ 8

Ваш код не работает. По определению цикла "item" должен быть в Z. "Цикл" For... in "в Python означает" Loop, хотя список с именем "z", каждый раз, когда вы выполняете цикл, дайте мне следующий элемент в список и назовите его "item" "

http://docs.python.org/tutorial/controlflow.html#for-statements

Я думаю, что ваша путаница возникает из-за того, что вы дважды используете имя переменной "item" , чтобы означать две разные вещи.

Ответ 9

Вы переназначаете элемент значениям в z при повторении через z. Итак, первый раз в вашем цикле for, item = 0, next item = 1 и т.д. Вы никогда не проверяете один список против другого.

Сделать это очень явно:

>>> item = [0,1,2,3,4,5,6,7,8,9]
>>> z = [0,1,2,3,4,5,6,7]
>>> 
>>> for elem in item:
...   if elem not in z:
...     print elem
... 
8
9

Ответ 10

В случае, когда item и z - отсортированные итераторы, мы можем уменьшить сложность от O(n^2) до O(n+m), сделав это

def iexclude(sorted_iterator, exclude_sorted_iterator):
    next_val = next(exclude_sorted_iterator)
    for item in sorted_iterator:
        try:
            while next_val < item:
                next_val = next(exclude_sorted_iterator)
                continue
            if item == next_val:
                continue
        except StopIteration:
            pass
        yield item

Если эти два являются итераторами, у нас также есть возможность уменьшить объем памяти, не сохраняя z (exclude_sorted_iterator) в виде списка.