我有两个列表a
和b
。然后我尝试找到列表值之间的所有三元素组合,并且只查找列表b
中存在值的那些组合。现在我按照以下方式进行:
import itertools as it
a = [1,2,3,4]
b = [5,6]
for i in range(len(b)):
a.append(b[i])
c = []
for j in it.combinations(a, 3):
if 5 in j or 6 in j:
c.append(list(j))
# output:
# [[1, 2, 5], [1, 2, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [1, 5, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6], [2, 5, 6], [3, 4, 5], [3, 4, 6], [3, 5, 6], [4, 5, 6]]
不幸的是,对于大型列表,这是一种无效的方式,因为列表b
中元素存在的条件位于具有函数it.combinations
的循环后面,在这样的系统中是无论条件如何都完全执行。在大型列表的情况下,计算量会严重超载。
是否有可能以不同的方式获得这样的结果?
答案 0 :(得分:1)
怎么样:
import itertools as it
a = [1,2,3,4]
b = [5,6]
c = []
for i in range(1,3):
for j in it.combinations(b,i):
for k in it.combinations(a,3-i):
c.append(j+k)