1

正如问题所暗示的那样,我正在尝试创建一系列元组:
[(1,1),(2,2),(3,3),(4,4),(5,5)...]
我想知道这样做的最短方法是什么?

4

4 回答 4

3
from itertools import repeat
zip(*repeat(xrange(1, n_tuples), 2))

优点:

  • 快速:仅需要约 56% 的时间,需要具有列表推导的表达式。IPython 报告:10000 个循环,最好的 3:每个循环92.8 us,带有n_tuples = 1000列表理解: 10000 个循环,最好的 3:每个循环165 us)。(我强调这一点,因为它是专门要求“最快的方式”)。
  • 您可以轻松更改元组中相同元素的数量(通过将 替换2为所需的数字)。
  • 它更短(至少没有import)。
于 2013-05-27T18:39:43.193 回答
3

Use a list comprehension:

>> [(i,i) for i  in xrange(1,6)]
[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
于 2013-05-27T18:01:31.057 回答
0

Just use a list comprehension.

number_of_tuples = 6
[(i, i) for i in range(number_of_tuples)]
于 2013-05-27T18:02:00.463 回答
0

如果按范围表示必然是一个列表,请在此处查看其他答案。

否则,如果您只想遍历此或类似内容,请考虑将推导用作生成器,而无需从中列出:

g = ((i, i) for i in xrange(1, 6))

然后:

for a, b in g:
  print a, b

创建该生成器肯定比创建列表要快。

于 2013-05-27T19:01:51.423 回答