2013-07-12 5 views
2

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

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

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

Я попытался следующий код:

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

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

fin = ['D'] 

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

+0

является элементы в каждом списке отсортированы? –

+0

Да, только соответствующие элементы в каждом списке следует сравнивать –

ответ

6

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

set(list1) - set(i[0] for i in list2) 
2

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

fin = [i for i in list1 if i not in map(lambda(x,_):x,list2)] 
1

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

fin = [a for a in list1 if a not in [b for b,_ in list2]] 
+0

Это хорошо работает. Благодаря :) –

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