我有一个清单[1,2,3]。
我想要一个接收列表的函数和另一个数字,长度。
f([1, 2, 3], 4) = [
[1, 1, 1, 1],
[1, 1 , 1, 2],
[1, 1, 1, 3],
[1, 1, 2, 1],
[1, 1, 3, 1],
#and so on...
]
也许itertools有答案?
1 个答案:
答案 0 :(得分:6)
itertools.combinations_with_replacement是您寻求的功能。
在[17]中:i = itertools.combinations_with_replacement((1,2,3),4)
在[18]中:下一个(i)
出[18] :( 1,1,1,1)
在[19]:下一个(i)
出[19] :( 1,1,1,2)
在[20]中:下一个(i)
出[20] :( 1,1,1,3)
在[21]中:下一个(i)
出[21] :( 1,1,2,2)
在[22]中:
如果您想要所有组合的集合,包括仅按顺序不同的项目,请尝试以下方法:
#从itertools.combinations_with_replace示例修改
#来自python doc。
import itertools
导入pprint
def odometer(iterable,r):
pool = tuple(iterable)
n = len(游泳池)
对于itertools.product中的索引(range(n),repeat = r):
yield元组(在索引中为i的pool [i])
pprint.pprint(列表(里程表([1,2,3],4)))