0

假设我有以下列表:

lst = [0,1,3,a,b,c]

我希望最终结果是 的所有可能排列lst,但长度为 20 个字符。

我已经看过并且只能找到可以创建长度为 6 或更少的最终结果的示例。

有任何想法吗?

4

4 回答 4

3

我想itertools.product这就是你要找的。

# A simple example
import itertools
lst = [0, 1]
print(list(itertools.product(lst, repeat=2)))
# [(0, 0), (0, 1), (1, 0), (1, 1)]

请注意,itertools.product它本身返回一个itertools.product对象,而不是一个列表。

# In your case
import itertools
lst = [0, 1, 3, a, b, c]
output = list(itertools.product(lst, repeat=20))
于 2013-01-20T04:24:28.003 回答
0

你确定要all permutations吗?假设您想重用长度为 6^20 的列表的字符(不是排列)。

如果您想从该列表中的字符构建一个长度为 20 的字符串,这应该可以完成工作:

from random import choice
''.join(choice(chars) for _ in range(length))
于 2013-01-20T04:21:22.700 回答
0

问题是排列和组合(如果您使用 itertools)遵循这样的定义,即每个结果只有在其长度等于或小于原始列表的情况下才能物理存在。

如果您建议您希望有效结果之一是“013abc013abc013abc01”,那么您必须将您的列表修改为只有 20 个项目长并由这 6 个值组成。

from itertools import permutations
i = [0,1,3,'a','b','c',0,1,3,'a','b','c',0,1,3,'a','b','c',0,1]
results = []
for a in permutations(i, 20):
    results.append(a)
于 2013-01-20T04:32:55.263 回答
0

list(permutations(lst,x)); 哪里lst是可迭代的(你的输入列表)并且x是元素的数量

例如:

In [8]: lst = [0, 1, 3, 'a', 'b', 'c']

In [9]: from itertools import permutations

In [10]: result=[list(permutations(lst,x)) for x in range(1,len(lst))]
于 2013-01-20T04:42:25.520 回答