使用range()和step进行字典理解



我试图在Python 2.7中使用字典理解构建一个字典。我想使用range()函数的开始和停止值以及步长作为循环变量。代码如下:

{ i: i*2 for i in range(0, 50, 5) }

当我在REPL中运行它时,我得到以下输出:

{0: 0, 35: 70, 5: 10, 40: 80, 10: 20, 45: 90, 15: 30, 20: 40, 25: 50, 30: 60}

正如你所看到的,这些值并不是按升序排列的。

谁能告诉我我做错了什么?非常感谢你的帮助!

在Python 2.7中,您希望使用xrange代替range,并使用元组

中的collections.OrderedDict
  • xrange是一个序列,避免了创建中间的list对象
  • OrderedDicts(可能很明显)是一个保留插入顺序的字典
>>> from collections import OrderedDict
>>> d = OrderedDict((i, i*2) for i in xrange(0, 50, 5))
>>> d
OrderedDict([(0, 0), (5, 10), (10, 20), (15, 30), (20, 40), (25, 50), (30, 60), (35, 70), (40, 80), (45, 90)])
>>> d[5]
10

然而,作为@Barmar注意,如果您只是查找值,那么的顺序并不重要(它的表示方式并不一定表明以相同顺序查找的值更快,因为它们在搜索之前进行了散列)。我还没有测试过,但它可能有一个无序的(正常的)dict,它应该是一个0(1)查找性能更高。

此外,由于字典的公式很简单,在运行时计算它们可能会更好!

相关内容

  • 没有找到相关文章