Python 两个列表值之间的选定组合
我有两个列表Python 两个列表值之间的选定组合,python,python-3.x,combinations,itertools,Python,Python 3.x,Combinations,Itertools,我有两个列表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.a
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.compositions
的循环后面,在这样的系统中,该函数的执行完全与条件无关。在大列表的情况下,计算会严重过载
有可能以不同的方式获得这样的结果吗?如何:
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)
难道你不想要所有两个长度组合的
b
加上每个a
,以及所有两个长度组合的a
加上每个b
?为什么不呢,结果会是一样的:)与大型列表上的时间活动一样有趣。在这种情况下,类似于it.chain(it.product(it.compositions(a,2),b),it.product(it.compositions(b,2,a))
将为您提供一个迭代器,((1,2),5),((1,2),6),…
,然后您可以将元组处理为列表。您还可以考虑是否真的需要一个列表中的所有输出。我不一定需要一个列表中的所有输出。对我来说更重要的是,它在显式循环中工作,因为对于大型列表,它可能是一个重载系统。因为后来我检查每个子列表的条件。