我试图得到list_a的子集,其中列表b和列表c的总和最大,并且小于或等于阈值。(列表b和列表c对应于列表a)
比如说list_a = [1, 2, 3, 4, 5]
list_b = [3,4,7,8,2]
list_c = [4,6,1,5,8]
Threshold = 12
如果列表b和列表c的值之和小于或等于阈值,那么列表b必须小于或等于阈值,而列表c必须小于或等于阈值。我不知道如何才能用最少的计算时间得到这个结果。
通过下面的函数,我试图创建子集,最终,我想得到一个列表,其中只有列表b和列表c的总和低于阈值的子集。
例如,子集(1,2)具有7作为列表B (3+4) 的值,并且列表C具有值10(4+6)。
我尝试了以下方法来创建子集:
def powerset(s):
if s:
tail1 = s[1:]
for e in chain.from_iterable(combinations(tail1, r) for r in range(len(tail1) + 1, -1, -1)):
yield (s[0],) + e
1条答案
按热度按时间hts6caw31#
下面是我的方法(也许还不完全完整,因为我对你的目标并不十分清楚):
此字典的键是与子集对应的整数(例如:24是二进制的11000,其对应于list_a)的{1,2}子集,并且值是来自list_b和list_c的对应和。
现在,如果你想要的只是list_a的相关子集,这个函数将打印它们(使用与total(n)函数相同的方法):