2013-07-27 1 views
0

Как я могу проверить Python, если элемент списка повторяется в другом списке? Я полагаю, что я должен использовать цикл, чтобы пойти и проверить по пунктам, но I'm застрял в чем-то вроде этого (который я знаю подмигнули не правильно):Сравните друг с другом, элементы внутри двух списков, в цикле for?

def check(a, b): 
    for item in b: 
     for item1 in a: 
      if b[item] in a[item1]: 
       b.remove(b[item1]) 

Я хочу, чтобы удалить повторяющиеся элементы во втором списке по сравнению с первым списком.

Редактировать: Я предполагаю, что в списке a есть элементы, которые повторяются в списке b. Эти предметы могут быть любого типа.

Желаемый результат: а = [а, б, в] Ь = [с, d, е]

Хочу добавить как списки и печать: ABCDE

ответ

2

Предполагая, что a и b не содержит повторяющиеся элементы, которые должны быть сохранены и элементов всех hashable, вы можете использовать Python имеет встроенный set:

c = list(set(b) - set(a)) 
# c is now a list of everything in b that is not in a 

Это будет работать для:

a, b = range(7), range(5, 11) 

, но это было бы не работы для:

a = [1, 2, 1, 1, 3, 4, 2] 
b = [1, 3, 4] 

# After the set operations c would be [2] 
# rather than the possibly desired [2, 2] 

В случае, когда дублирует желательны вы можете сделать следующее:

set_b = set(b) 
c = [x for x in a if x not in b] 

Использование set для b сделает поиск O(1), а не O(N) (что не имеет значения для небольших списков).

1

Вы можете использовать set операции Python без необходимости петель:

>>> a = [1,2] 
>>> b = [2] 
>>> set(a) - set(b) 
set([1]) 
>>> 
1

Используйте set команду и list, чтобы получить список обратно.

d = list(set(a + b)) 

Вы можете использовать list.sort(), если вы хотите, чтобы отсортировать список, а также.

Смежные вопросы