分析 Python 中的两个数字列表

Analysis two lists of number in Python

我在 Python 中有两个排序的数字列表,它们的元素之和相等。我想一起分析这两个列表。简而言之,我想从第一个列表中找到一些元素,这些元素等于第二个列表中的一个元素。如果有多个组合,我需要找到所有的组合。

例如:

List1=[29,32,51,76,80,89] #==> 29+32+51+76+80+89=357
List2=[156,201] #==> 156+201=357

结果:

[
[[29,51,76],156], # Combination 1
[[76,80],156], # Combination 2
[[29,32,51,89],201], # Combination 1
[[32,80,89],201] # Combination 2
]

我试图找到一些使用“For”循环的方法,但它的性能太低并且取决于元素的数量。

我认为没有比创建 l1 的所有可能子集、计算总和并检查它是否存在于 l2 中更快的方法了:

import itertools

l1 = [29, 32, 51, 76, 80, 89]
l2 = set([156, 201])

for r in range(1, len(l1) + 1):
    for sublist in itertools.combinations(l1, r):
        if sum(sublist) in l2:
            print(sublist, sum(sublist))

这会打印

(76, 80) 156
(29, 51, 76) 156
(32, 80, 89) 201
(29, 32, 51, 89) 201