Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        去年关闭。
                                                                                            
                
        
我有一组元组:

(1, 3, 6)
(5, 2, 4)
...
(8, 1, 9)


我可以得到总和低于某个特定值的中间(或第一个或最后一个)值的组合:

def func(tuples, maxVal):
    values = [i[1] for i in tuples]
    result = [seq for s in range(len(values), 0, -1) for seq in itertools.combinations(values, s) if sum(seq) <= maxVal]
    print(result)


但是我希望能够跟踪这些值来自哪个元组,所以我不仅要返回具有适当总和的值集,还想返回这些值来自的整个元组。不知道该怎么做。

最佳答案

怎么样

from itertools import combinations

def func(tuples, maxVal):
    return [seq for s in range(len(tuples), 0, -1)
                for seq in combinations(tuples, s)
                if sum(t[1] for t in seq) <= maxVal]

tuplesset = {(1, 3, 6), (5, 2, 4), (8, 1, 9)}
print(func(tuplesset, 4))


从那里的打印输出是

[((1, 3, 6), (8, 1, 9)), ((5, 2, 4), (8, 1, 9)), ((1, 3, 6),), ((5, 2, 4),), ((8, 1, 9),)]


这似乎是正确的。

我的例程和您的例程之间的主要区别是,我省略了values变量(元组中的中间值),并使用表达式sum(t[1] for t in seq)而不是sum(seq)来求和元组的中间值。为了清晰起见,我还把您的一条长线分成多条短线,以便更好地遵循PEP8。

关于python - 有没有一种方法可以获取一组元组的组合? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51409422/

10-16 04:22