切片分割显示和服务器不兼容,Python的heapify()与列表理解和切片不兼容吗?...

我在一个程序中发现了一个有趣的错误,我有点懒惰地执行,并想知道我是否正确理解它。简短版本是Python's heapq implementation实际上并没有排序列表,它只是以堆为中心的方式列出列表。具体而言,我期待heapify()产生一个有序列表,以有序的方式促进列表理解。使用Python的heapify()与列表理解和切片不兼容吗?

优先提示例如,Python的文档:

from heapq import heapify, heappush, heappop

from random import shuffle

class Item(object):

def __init__(self, name):

self.name = name

lst = []

# iterate over a pseudo-random list of unique numbers

for i in sample(range(100), 15):

it = Item("Some name for %i" % i)

heappush(lst, (i, it))

print([i[0] for i in lst])

结果

>>> [2, 22, 7, 69, 32, 40, 10, 97, 89, 33, 45, 51, 94, 27, 67]

此,我们注意到,不在列表的原排序,但显然一些以堆为中心的排序为described here。我正在懒洋洋地期待这完全订购。

作为测试,通过heapify()运行列表会导致没有变化(如列表已经堆ishly订购):

heapify(lst)

print([i[0] for i in lst])

>>> [2, 22, 7, 69, 32, 40, 10, 97, 89, 33, 45, 51, 94, 27, 67]

而通过与订货的heappop()功能结果的列表迭代预期:

lst2 = []

while lst: lst2.append(heappop(lst))

print([i[0] for i in lst2])

>>> [2, 7, 10, 22, 27, 32, 33, 40, 45, 51, 67, 69, 89, 94, 97]

因此,它似乎heapq不下令列表(至少在这个词的人的意义上),而是heappush()和heappop()功能能够饶有兴趣地列出堆。

结果:堆积列表上的任何切片和列表理解操作都会产生无序结果。

这是真的,这是总是是真的吗?

(顺便说一句:Python之3.0.1上的WinXP系统)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值