我目前正在编写一个使用itertools的程序,其中一个程序似乎无法正常运行。我希望确定排列函数输出的列表长度的输入等于从中生成其输出的列表的长度。换句话说,我有
import itertools
b = 0
c = 9
d = [0,1,2]
e = len(d)
while b < c:
d.append(b)
b = b+1
print([x for x in itertools.permutations(d,e)])
我希望这能产生d等于这个长度的所有可能的排列。我一直在试验这个,似乎第二个限定词必须是整数。我甚至尝试创建一个新变量f,并使用f = int(e)
然后在print语句中用f替换e,但没有成功。我得到的任何一个都是[()]
感谢您的帮助。
答案 0 :(得分:4)
您需要在构建列表后设置e
。 len(d)
返回一个值,而不是对列表长度的引用。
d = range(0,9) # build an arbitrary list here
# this creates a list of numbers: [0,1,2,3,4,5,6,7,8]
e = len(d)
print list(itertools.permutations(d, e))
请注意,排列的数量非常大,因此将所有排列存储在列表中会占用大量内存 - 你最好还是这样:
d = range(0,9)
e = len(d)
for p in itertools.permutations(d, e):
print p