【问题标题】:is it possible to have lists with the maximum number of common integers?是否可能有包含最大数量的公共整数的列表?
【发布时间】:2023-01-13 20:15:16
【问题描述】:

我有一个包含多个整数列表的列表,我想找到具有最大公共元素的列表。

我尝试使用交集,但它返回一个空集,因为这里的交集涉及的公共元素全部在我的列表中找到的列表。 我希望我的代码向我显示具有我想要的公共整数的列表。例如,如果我想要列表有 3 个共同的整数,它会向我显示有问题的列表。 我在网上搜索了很多,但我只能找到确定两个列表是否相同的推理。

这是交集的代码:

import string
list = [[3,5,9], [4,6,6], [4,7], [2,7], [2,1,4,5], [1,2,4,6], [3,3], [3,3], [3,2,1], [3,2]]
result = set.intersection(*map(set,list))
print(result)

这是结果:

set()

但我想要的是:

[2,1,4,5],[1,2,4,6]

【问题讨论】:

  • 解释一下,为什么数字5应该在最后的子列表[2,1,4,5]
  • 请解释您想要的输出,我得到最常见整数的子列表是 [1,2,4,6] 和 [3,2,1]
  • “最大公共整数数”是什么意思,我本以为这意味着重复次数最多的集合,但从你想要的输出来看,它似乎是唯一整数数最多的集合。

标签: python python-3.x


【解决方案1】:

您想要的是根据交集中有 3 个项目的条件过滤列表对。

您可以使用 itertools.combinations 获取所有对,并使用 list comprehension 过滤它们:

import string
from itertools import combinations

list_ = [[3,5,9], [4,6,6], [4,7], [2,7], [2,1,4,5], [1,2,4,6], [3,3], [3,3], [3,2,1], [3,2]]

print([c for  c in combinations(list_, r=2) if len(set(c[0]) & set(c[1])) == 3])

输出符合要求:

[([2, 1, 4, 5], [1, 2, 4, 6])]

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2016-10-16
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多