我有一组元组:
foreach (var record in AllConditionsByCountry) // you can use AllConditionsByCountry.ForEach(record=>{...});
{
...
//AllConditionsByCountry will not query db again, because it's a list, no long a query
var rList = AllConditionsByCountry.Where(x => x.ConditionID == conditionID);//.Select(x => x).AsEnumerable(); //no necessary to use AsXXX if compilation do not require it.
...
}
我可以得到总和低于某个值的中间(或第一个或最后一个)值的组合:
(1, 3, 6)
(5, 2, 4)
...
(8, 1, 9)
但是我希望能够跟踪这些值来自哪个元组,因此,我不仅要返回带有适当总和的值集,还想返回这些值来自的整个元组。不知道该怎么做。
答案 0 :(得分:2)
怎么样
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。
答案 1 :(得分:0)
如果您确实要保存元组而不是仅保存索引,则可以使用映射为对的字典:
{(x,x,x):(((z,z,z),(y,y,y)),...}