gpt4 book ai didi

python - 比较列表列表中的元组值?

转载 作者:行者123 更新时间:2023-12-04 00:50:16 26 4
gpt4 key购买 nike

我有一个列表如下:

mylist=[[(1, 1)], [(1, 1), (1, 2)], [(1, 1), (1, 2), (1, 3)], [(1, 1), (1, 2), (1, 4)]]

现在,我想要的是将此列表中的每个元素与所有其他元素进行比较,如果该元素是与之比较的元素的子集,则应将其弹出。例如,[(1, 1)][(1, 1), (1, 2)] 的子集,然后 [(1, 1 )] 应该从 list 中弹出。同样,[(1, 1), (1, 2)][(1, 1), (1, 2), (1, 3)] 那么它也应该被弹出。

在这种情况下,我们得到如下输出:

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

我尝试搜索所有可能的答案,但没有一个是针对这个特定案例的。

到目前为止,我已经尝试了以下方法,但用处不大:

for i, e in enumerate(mylist):
mylist[i] = tuple(e)
mylist = list(set(mylist))

最佳答案

您需要删除 any来自 mylist 的列表,其中 all列表中的元组出现在 mylist 中的另一个列表中。这最容易通过分配给新列表来完成:

newlist = []
for i, lst in enumerate(mylist):
if not any(all(t in l for t in lst) for l in mylist[:i] + mylist[i+1:]):
newlist.append(lst)

或者作为列表理解:

newlist = [lst for i, lst in enumerate(mylist) if not any(all(t in l for t in lst) for l in mylist[:i] + mylist[i+1:])]

在这两种情况下,对于您的示例数据,输出为:

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

对于较大的列表,这可能会变慢,在这种情况下,您可以通过首先将 mylist 中的条目映射到集合来加快速度:

mylist=[[(1, 1), (1, 2)], [(1, 1), (1, 2), (1, 3)], [(1, 1), (1, 2), (1, 4)], [(1, 1)]] 
mylist=list(map(set, (tuple(l) for l in mylist)))
newlist = [list(lst) for i, lst in enumerate(mylist) if not any(lst.issubset(l) for l in mylist[:i] + mylist[i+1:])]

关于python - 比较列表列表中的元组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67188362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com