从已知对象列表中创建包含所有可能排列的列表,但最终列出x的大小

时间:2013-01-20 04:16:00

标签: python python-2.7 permutation

假设我有以下列表:

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

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

我看过,只能找到可以产生长度不超过6个的最终结果的例子。

有什么想法吗?

4 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

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

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

from random import choice
''.join(choice(chars) for _ in range(length))

答案 2 :(得分: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)

答案 3 :(得分: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))]