python:从itertools.permutations()分配值的正确方法?

时间:2011-07-11 15:13:40

标签: python

以下代码创建了一个多维列表(不确定Pythonic是不是说它。这里的PHP人员)

patterns.append(list(itertools.permutations('1234567',7)))

模式的价值变为:

([
    [1,2,3,4,5,6,7],
    [1,2,3,4,5,7,6], ...

])

我想要的是结果是这样的:

([1,2,3,4,5,6,7], [1,2,3,4,5,7,6]...)

如果我尝试这样做:

patterns = list(itertools.permutations('1234567',7))

结果是个别数字列表

123445671234576

我错过了什么?

谢谢,

3 个答案:

答案 0 :(得分:1)

如果你需要

([1,2,3,4,5,6,7], [1,2,3,4,5,7,6]...)

比你可以使用:

from itertools import permutations
patterns = tuple(list(int(y) for y in x) for x in permutations('1234567',7))

如果您需要获取数字,则可以使用xrange而不是'1234567':

patterns = tuple(list(x) for x in permutations(xrange(1,8),7))

答案 1 :(得分:1)

extend()而不是append()

patterns.extend(itertools.permutations('1234567',7))

这也使list()变得多余,因为extend()适用于迭代。

这假设您可以将排列本身作为元组。你的问题很混乱,因为你的符号与你用文字写的不一致。

答案 2 :(得分:0)

您可以使用

获取列表元组
tuple(list(p) for p in itertools.permutations('1234567', 7))

如果你想要整数而不是单元素字符串,那么一个简单而通用的方法就是

digits = [int(digit) for digit in '1234567']
tuple(list(p) for p in itertools.permutations(digits, 7))