Python itertools.product()返回值
当我尝试运行以下代码时Python itertools.product()返回值,python,list,tuples,Python,List,Tuples,当我尝试运行以下代码时 product([1,2,3],['a','b']) 它返回了以下类型的对象: <itertools.product object at 0x01E76D78> 有没有办法把它变成一个列表列表,而不是元组?像这样: [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], [3, 'a'], [3, 'b']] 提前谢谢 您可以执行以下操作,但这是毫无意义的。由于值不变,元组比列表更适合这种情况。它还可以节省内存 >>
product([1,2,3],['a','b'])
它返回了以下类型的对象:
<itertools.product object at 0x01E76D78>
有没有办法把它变成一个列表列表,而不是元组?像这样:
[[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], [3, 'a'], [3, 'b']]
提前谢谢 您可以执行以下操作,但这是毫无意义的。由于值不变,元组比列表更适合这种情况。它还可以节省内存
>>> from itertools import product
>>> [list(x) for x in product([1,2,3],['a','b'])]
[[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], [3, 'a'], [3, 'b']]
它返回元组的迭代器。如果需要列表列表,可以执行以下操作:
[list(a) for a in product([1,2,3],['a','b'])]
然而,在许多情况下,只使用迭代器更好。您只需执行以下操作:
for item in product([1,2,3],['a','b']):
# do what you want with the item
最外层的
list()
在Python2上不是必需的,尽管它在Python3上是必需的。这是因为在Python3中,map对象
由map()
返回笛卡尔积。您的问题是什么?您想知道itertools.product
返回的是什么吗?或者您想知道如何将返回值转换为列表列表?为什么需要这样做?似乎很有可能,无论你想实现什么,都可以用更好的方式来实现。itertools
是用来避免建立列表的。列表比元组更糟糕吗?我试图将元组转换为列表,因为我需要为其他内容格式化它们。我想知道itertools.product返回的内容,以及如何将它们转换为列表。抱歉,这就是为什么我认为列表理解更适合交叉兼容,尽管这是一项非常奇怪的任务。@jamylak:是的,它确实更适合交叉兼容。我避免使用它们的原因是,如果我实际上不需要它们的虚拟变量,我通常会避免使用它们,以避免引入噪声。(map(list,…)
比[list(l)for l in…]
…YMMV)读起来好多了@Mehrad我明白你的意思,但在这种情况下,你的解决方案在Python 2上看起来更好,但在Python中更糟3@jamylak字体我想我3年前没有回复这个,但问题是,在Python2中,伪变量可能会影响程序的其余部分,因为它的作用域泄漏。这是一件正确的事情,不仅仅是一件审美的事情。你指的是什么?
for item in product([1,2,3],['a','b']):
# do what you want with the item
list(map(list, product([1, 2, 3], ['a', 'b'])))