我想让itertools返回一个列表列表

时间:2017-03-06 12:41:51

标签: python

我正在使用itertools生成列表的所有可能排列。我希望它返回一个列表列表,但这不是我得到的。

例如

import itertools
print list(itertools.permutations([1, 2]))

返回

>>> [(1, 2), (2, 1)]

但我期待

>>> [[1, 2], [2, 1]]

有可能吗?

2 个答案:

答案 0 :(得分:4)

只需将您的元组映射到列表:

import itertools
try:
    # Python 2, use Python 3 iterator version of map
    from future_builtins import map
except ImportError:
    # already using Python 3
    pass

map(list, itertools.permutations([1, 2]))

在Python 3中,map()也是一个迭代器,因此在迭代时元组会转换为列表。

我在这里假设你不需要一次完整的排列结果。您可以随时在list()上致电map(),或者如果您这样做,请使用列表理解:

[list(t) for t in itertools.permutations([1, 2])]

或者对于Python 2,只需删除from future_builtins导入并离开map即可生成列表。

答案 1 :(得分:4)

您可以使用列表推导将每个元组转换为列表并将结果收集到列表中:

>>> [list(p) for p in itertools.permutations([1, 2])]
[[1, 2], [2, 1]]