是否可以在不使用“ tuple()”的情况下将生成器对象转换为元组?

Sup*_*r S 1 python

可以使用以下代码创建列表:

>>> [i+1 for i in(0,1,2)]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

元组可以做类似的事情吗?

>>> (i+1 for i in(0,1,2)),
(<generator object <genexpr> at 0x03A53CF0>,)
Run Code Online (Sandbox Code Playgroud)

我会期望(1, 2, 3)作为输出。

我知道您可以做tuple(i+1 for i in(0,1,2)),但是既然您可以做[i+1 for i in(0,1,2)],我希望元组也可以做类似的事情。

Sun*_*tha 6

在python 3中,您可以使用来解压缩生成器*

这是一个例子:

>>> *(i+1 for i in (1,2,3)),
(2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很酷的技巧,但不够明确,而且可能没有理解的速度。 (2认同)
  • 它 __is__ 是一个技巧,而且可读性稍差。当我第一次尝试时,我错过了最后的“,”。 (2认同)
  • 不要误会,这种方法并不比明显的方法更快:“tuple(i+1 for i in (1,2,3))”。它只是可读性较差且更令人困惑。--- 它也不是某种特殊的语法,它只是将生成器(它临时创建一个列表)解压到一个新的元组(由尾随逗号标记)中。 (2认同)