сравнить два списка и вывести неравные элементы

У меня есть два списка в следующем формате:

list1 = ['A','B','C','D']
list2 = [('A',1),('B',2),('C',3)]

Я хочу сравнить два списка и распечатать третий список, в котором эти элементы будут присутствовать в списке1, но не в списке2, и я хочу сравнить только элементы списка2[i][0].

Я попробовал следующий код:

fin = [i for i in list1 if i not in list2]

Но он печатает все элементы в list1. Я хочу, чтобы результат в приведенном выше случае был:

fin = ['D']

Может ли кто-нибудь предложить, как это сделать? Кроме того, я не хочу преобразовывать свой 2D-массив list2 в 1D-массив.


person wanab_geek    schedule 12.07.2013    source источник
comment
Отсортированы ли элементы в каждом списке?   -  person Brian Cain    schedule 13.07.2013
comment
Да, следует сравнивать только соответствующие элементы в каждом списке   -  person wanab_geek    schedule 13.07.2013


Ответы (3)


Используйте установленную разницу.

set(list1) - set(i[0] for i in list2)
person Ali Afshar    schedule 12.07.2013

Вы также можете сделать это (вам нужно сравнить i с первым элементом каждого кортежа в list2):

fin = [i for i in list1 if i not in map(lambda(x,_):x,list2)]
person jh314    schedule 12.07.2013

Как насчет вложенных понятий:

fin = [a for a in list1 if a not in [b for b,_ in list2]]
person Community    schedule 12.07.2013