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

Python 创建一个包含已知对象列表中所有可能排列的列表,但最终列表的大小为x,python,python-2.7,permutation,Python,Python 2.7,Permutation,假设我有以下列表: lst = [0,1,3,a,b,c] 我希望最终结果是所有可能的lst排列,但长度为20个字符 我已经看过了,并且只能找到最终结果的例子,其长度为6或更少 有什么想法吗?你确定要所有排列吗?假设您希望重用长度为6^20的列表中的字符(而不是排列) 如果希望从该列表中的字符生成一个长度为20的字符串,则应执行以下操作: from random import choice ''.join(choice(chars) for _ in range(length)) 是否确实要

假设我有以下列表:

lst = [0,1,3,a,b,c]
我希望最终结果是所有可能的
lst
排列,但长度为20个字符

我已经看过了,并且只能找到最终结果的例子,其长度为6或更少


有什么想法吗?

你确定要
所有排列吗?假设您希望重用长度为6^20的列表中的字符(而不是排列)

如果希望从该列表中的字符生成一个长度为20的字符串,则应执行以下操作:

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

是否确实要
所有排列
?假设您希望重用长度为6^20的列表中的字符(而不是排列)

如果希望从该列表中的字符生成一个长度为20的字符串,则应执行以下操作:

from random import choice
''.join(choice(chars) for _ in range(length))
我想这就是你要找的

# 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))
我想这就是你要找的

# 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))

问题在于,排列和组合(如果使用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)

问题在于,排列和组合(如果使用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)
列表(排列(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))]
列表(排列(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))]


“20个字符长”是什么意思?你的意思是允许重复?那么排列不是你要找的词。如果我有一个0和a的列表,我希望它是3个字符长,它会显示一个3个字符的字符串,并且是基于0和a的所有可能的排列。你说的“20个字符长”是什么意思?你的意思是允许重复吗?那么排列不是你要找的词。如果我有一个0和a的列表,我希望它是3个字符长,它会显示一个3个字符的字符串,是基于0和a的所有可能的排列。我不认为这是他想要的(嗯,我当然希望不是!)。如果每个排列占用一个字节,
结果
占用的字节数超过2 EB。也会有比其他角色更多的0和1。我希望不是,但从技术上讲,这就是排列。但我不认为会有更多的0和1。每个结果的长度为20,每个位置由可用的6个字符中的一个组成。列表中有4个
0
s,但只有3个
a
s。如果
permutation
的工作方式与我认为的一样,那么它应该会生成比
a
s更多的
0,因为这4个都被认为是唯一的。我认为这不是他想要的(当然,我希望不是!)。如果每个排列占用一个字节,
结果
占用的字节数超过2 EB。也会有比其他角色更多的0和1。我希望不是,但从技术上讲,这就是排列。但我不认为会有更多的0和1。每个结果的长度为20,每个位置由可用的6个字符中的一个组成。列表中有4个
0
s,但只有3个
a
s。如果
permutations
的工作方式与我认为的一样,那么它应该会生成比
a
s更多的
0,因为这4个都被认为是唯一的。看起来这正是我想要的,但是哇,当我运行你的代码时,我的电脑会结巴。我想要求20个字符的字符串太多了。当我把它降到5时,它似乎给了我正确的结果。谢谢这是因为结果是6**20=3656158440062976排列。@MarkTolonen那么我如何运行这样的代码来获得所有6个输入的20个字符串呢?有没有更快的方法?@George将结果存储在列表中会占用太多内存。如果您只需要遍历它们,那么不要将其转换为列表,将其作为
itertools.product
对象保留。您将需要一个大的MySQL表。你的硬盘有多少PB?还有时间。即使每纳秒产生一个,也需要40天以上的时间。看起来这正是我想要的,但哇,当我运行你的代码时,我的电脑坏了。我想要求20个字符的字符串太多了。当我把它降到5时,它似乎给了我正确的结果。谢谢这是因为结果是6**20=3656158440062976排列。@MarkTolonen那么我如何运行这样的代码来获得所有6个输入的20个字符串呢?有没有更快的方法?@George将结果存储在列表中会占用太多内存。如果您只需要遍历它们,那么不要将其转换为列表,将其作为
itertools.product
对象保留。您将需要一个大的MySQL表。你的硬盘有多少PB?还有时间。即使每纳秒产生一个,也需要40天以上的时间。