2

我有以下格式的两个列表:

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

我想比较这两个列表并打印出第三个列表,该列表将在 list1 中存在这些元素,但在 list2 中不存在,我只想比较 list2[i][0] 元素。

我尝试了以下代码:

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

但它会打印 list1 中的所有元素。我希望上述情况下的输出为:

fin = ['D']

有人可以建议如何做到这一点吗?另外,我不想将我的二维数组 list2 转换为一维数组。

4

3 回答 3

6

使用设定的差异。

set(list1) - set(i[0] for i in list2)
于 2013-07-12T21:39:07.933 回答
2

您也可以这样做(您需要将 i 与 list2 中每个元组的第一个元素进行比较):

fin = [i for i in list1 if i not in map(lambda(x,_):x,list2)]
于 2013-07-12T21:40:57.110 回答
1

嵌套推导怎么样:

fin = [a for a in list1 if a not in [b for b,_ in list2]]
于 2013-07-12T21:46:36.673 回答