Python 生成可能的组合并仅获得前50个
我正在寻找一种方法,只获得前50个可能的组合(20个固定长度),但我似乎找不到我要找的。下面我举一个例子Python 生成可能的组合并仅获得前50个,python,combinations,Python,Combinations,我正在寻找一种方法,只获得前50个可能的组合(20个固定长度),但我似乎找不到我要找的。下面我举一个例子 import itertools a = array([1,2,5]) b = array([8,9,10]) c = 0 if c == 1: x = a y = b else: x = b y = a mylist = list(itertools.product(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y)) 我的输出是: (8 1
import itertools
a = array([1,2,5])
b = array([8,9,10])
c = 0
if c == 1:
x = a
y = b
else:
x = b
y = a
mylist = list(itertools.product(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y))
我的输出是:
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 5)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 1)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 2)
(8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 2 8 5)
.
.
等等
我已经遇到内存错误。我认为这有太多的组合,所以我只想得到前50个。有办法吗
提前谢谢 使用
itertools
,使用:
这将从
产品
中获取前50个元素,并将它们转换为一个列表。您的数组应声明为:a=array('l',[1,2,5])
。另外,您确定内存问题来自这段代码吗?(itertools
生成的迭代器应该是有效的)。@adrianp-itertools
在一个元素接一个元素使用时是有效的,而不是立即转换为列表。@eumiro-right,我错过了这一点,而不是x,y,x,y..
等,你可以使用产品(*[x,y]*10))
。这使得列表[x,y,x,y,…]
,然后*
基本上将产品([x,y,x,y…])
变成产品(x,y,x,y…)
。
list(itertools.islice(itertools.product(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y), 50))