两个列表

时间:2018-01-04 17:31:46

标签: python python-3.x combinations itertools

我有两个列表ab。然后我尝试找到列表值之间的所有三元素组合,并且只查找列表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的循环后面,在这样的系统中是无论条件如何都完全执行。在大型列表的情况下,计算量会严重超载。

是否有可能以不同的方式获得这样的结果?

1 个答案:

答案 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)