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

标签 python python-3.x list tuples

我有一个列表如下:

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/

相关文章:

python获取具有k个元素的数组的最大偶数和

python - 如何高效地将查询结果展开到字典中

python - 使用列表理解更改嵌套列表中的第一项

python - 在python中改组数组

list - Shell 中 Sharepoint 2010 中的备份列表

python - 为什么带有 pop 方法(或 del 语句)的 for 循环不遍历所有列表元素

python - Tkinter 条目小部件出现问题

python Scrapy CrawlSpider : Rule doesn't apply after logged in, 只抓取第一页

python - 为什么在同一目录中导入模块时出现 ModuleNotFound?

python-3.x - pandas - 增加日期时间时间(更多信息在文章中。)