Python:查找具有最大不同值的元组

2024-10-03 17:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个整数元组列表。你知道吗

我想返回一个新的列表,其中包含一些(或全部)元组,这样整数的总数就最大,并且没有重复的整数。你知道吗

my_tuples = [(1,2), (2,3,4), (1,2,3,4), (3,4,5,6), (4,5), (8,9)]
getGreatestCoverage(my_tuples) 
# expected output is [(1,2), (3,4,5,6), (8,9)]

注意。上述“预期输出”总共包含8个整数,没有重复整数。 我可以通过将输出的元组数限制为2来实现所需的结果:

def getGreatestCoverage_for_2_tuples(my_tuples):
    max_cover = 0
    for idx1, item1 in enumerate(my_tuples):
        for item2 in my_tuples[idx1+1:]:
            coverage = len(set(item1 + item2))
            if coverage >= max_cover:
                max_cover = coverage
                greatest_coverage = (item1, item2)

如果目标是返回正好2个元组,那么这个方法就可以了。如果目标正好返回3个元组,则可以添加另一个内部for循环。 这不符合我的意图,因为我希望允许任何数量的元组作为可能的输出。你知道吗


Tags: in目标列表formycoverage整数cover
2条回答

他说,如果没有重复项,那么这个集合就不会给出正确的结果,就好像有一个元组有10个元素,但有两个元素是重复的(对于一个集合,它将有9个元素),就不应该包括在内。按照这个逻辑,最好的解决方案是立即过滤那些元组。你知道吗

my_tuples = [(1,2), (2,3,4), (1,2,3,4), (3,4,5,6,1,2,7,5,6), (4,5), (8,9)]
print(max([i for i in my_tuples if len(i)==len(set(i))], key=lambda x: len(x)))

我不知道这是不是最优雅的解决方案,但这是我现在唯一的解决方案:

import itertools

#a = [(1,2), (2,3,4), (1,2,3,4), (3,4,5,6), (4,5), (8,9)]
#a = [(1,), (2,), (3,), (4,), (5,), (5,6), (6,7), (8,), (9, 10)]
a = [(0, 1, 2), (0,1), (1,2), (3,4), (4,5)]

def find_largest_group(x):
    max_ = 0
    max_len = max(map(max, x)) -  min(map(min, x)) + 1

    for i in range(1, len(x)+1):
        b = itertools.combinations(x, i)
        for tups in b:
            m = len(set.union(*map(set, tups)))
            if m==len(tuple(itertools.chain.from_iterable(tups))):
                if m==max_len:
                    max_tups = tups
                    break
                else:
                    if m > max_:
                        max_ = m
                        max_tups = tups
    return max_tups

输出:

In [68]: find_largest_group(a)
Out[68]: ((0, 1, 2), (3, 4))

相关问题 更多 >