我刚刚阅读了这个问题为什么 Python 中没有元组理解?
在接受的答案的评论中,指出没有真正的“元组理解”。相反,我们当前的选择是使用生成器表达式并将生成的生成器对象传递给元组构造函数:
tuple(thing for thing in things)
或者,我们可以使用列表推导式创建一个列表,然后将该列表传递给元组构造函数:
tuple([thing for thing in things])
最后,与公认的答案相反,最近的一个答案指出,元组推导确实是一件事(从 Python 3.5 开始),使用以下语法:
*(thing for thing in things),
对我来说,第二个示例似乎也是首先创建生成器对象的示例。这个对吗?
就幕后发生的事情而言,这些表达方式有什么不同吗?在性能方面?我假设第一个和第三个可能有延迟问题,而第二个可能有内存问题(如链接评论中所述)。
- 比较第一个和最后一个,哪个更pythonic?
更新:
正如预期的那样,列表理解确实要快得多。我不明白为什么第一个比第三个快。有什么想法吗?
>>> from timeit import timeit
>>> a = 'tuple(i for i in range(10000))'
>>> b = 'tuple([i for i in range(10000)])'
>>> c = '*(i for i in range(10000)),'
>>> print('A:', timeit(a, number=1000000))
>>> print('B:', timeit(b, number=1000000))
>>> print('C:', timeit(c, number=1000000))
A: 438.98362647295824
B: 271.7554752581845
C: 455.59842588083677