Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:比较两个不同大小的元组列表_Python_List_Tuples - Fatal编程技术网

Python:比较两个不同大小的元组列表

Python:比较两个不同大小的元组列表,python,list,tuples,Python,List,Tuples,我有两个元组列表。第一个列表包含x个具有2元组的条目,而另一个列表包含y个(更多)具有3元组的条目 我想比较两个列表,但只比较元组的第一个和第二个元素,基本上只删除双副本,但在比较过程中不应考虑第二个列表中每个元组的第三个条目 list_x=[(1,1),(1,2),(2,3),(2,5),(4,6), ...] list_y=[(1,1,33),(1,3,65),(2,4,11), ...] 现在,我想创建一个新的列表,从列表中删除列表中的所有元素,这些元素也出现在列表中。 结果列表应如下所

我有两个元组列表。第一个列表包含x个具有2元组的条目,而另一个列表包含y个(更多)具有3元组的条目

我想比较两个列表,但只比较元组的第一个和第二个元素,基本上只删除双副本,但在比较过程中不应考虑第二个列表中每个元组的第三个条目

list_x=[(1,1),(1,2),(2,3),(2,5),(4,6), ...]
list_y=[(1,1,33),(1,3,65),(2,4,11), ...]
现在,我想创建一个新的列表,从列表中删除列表中的所有元素,这些元素也出现在列表中。 结果列表应如下所示:

[(1,3,65),(2,4,11), ...]
对于大小相同的元组列表,只需将列表转换为一个集合并减去两个列表即可:

newlist = list(set(list_y) - set(list_x))
还可以按元组的第二个元素对结果列表进行排序:

newlist.sort(key=lambda tup: tup[1])

但现在的问题是:如果列表如上图所示,如何做到这一点?

请尝试以下代码:

set_x = set(list_x)
answer = sorted([t for t in list_y if (t[0], t[1]) not in set_x], key=lambda t:t[1])

您可以将
list_x
转换为一个集合,然后循环
list_y
并检查
list_y
的前两个元素是否存在于集合中,如果不存在,则将它们包括在结果列表中,这可以在如下所示的列表理解中完成。范例-

list_x=[(1,1),(1,2),(2,3),(2,5),(4,6), ...]
list_y=[(1,1,33),(1,3,65),(2,4,11), ...]

list_x_set = set(list_x)

result = [item for item in list_y if item[0:2] not in list_x_set]
演示-

In [57]: list_x=[(1,1),(1,2),(2,3),(2,5),(4,6)]

In [58]: list_y=[(1,1,33),(1,3,65),(2,4,11)]

In [59]: list_x_set = set(list_x)

In [60]: result = [item for item in list_y if item[0:2] not in list_x_set]

In [62]: result
Out[62]: [(1, 3, 65), (2, 4, 11)]
with for loops 

list_x=[(1,1),(1,2),(2,3),(2,5),(4,6)]
list_y=[(1,1,33),(1,3,65),(2,4,11)]

for elx in list_x:
    for ely in list_y:
        if ely[:-1] == elx:
            list_y.remove(ely)


print(list_y)

[(1, 3, 65), (2, 4, 11)]