假设我有以下列表:
lst = [0,1,3,a,b,c]
我希望最终结果是lst
的所有可能排列,但长度为20个字符。
我看过,只能找到可以产生长度不超过6个的最终结果的例子。
有什么想法吗?
答案 0 :(得分:3)
我认为itertools.product
正是您所寻找的。 p>
# 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))]