这段 Python 代码中,解释器如何能理解到 i 代表的是 h 中的各个元素呢?一开始也没有定义啊?

2018-08-21 13:11:49 +08:00
 kmdd33

def heapsort(iterable):

 h = []

 for value in iterable:

  heappush(h, value)

 return [heappop(h) for i in range(len(h))]

heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2173 次点击
所在节点    Python
9 条回复
ArianX
2018-08-21 13:46:07 +08:00
和 i 无关,因为用的是堆排序
huangzhe8263
2018-08-21 13:49:53 +08:00
列表生成式+range ? ,i 就是 index 吧
Hstar
2018-08-21 13:56:35 +08:00
因为 i 并不代表 h 中的各个元素。。能排序是因为 heapop 方法自动取出 h 中最小值
vimiix
2018-08-21 14:03:54 +08:00
可以把 `i ` 替换为 `_` ,这里只是做迭代用
leoleoasd
2018-08-21 14:13:14 +08:00
i 是 0-len(h)的数字 并不是元素
有挂这个你可以看一看堆的性质
只是简单的执行了 len(h)次 pop 而已
pop 的意思就是弹出堆中最小的元素
MicroCatPad
2018-08-21 15:17:03 +08:00
你改成 [heappop(h) for _ in range(len(h))] 也一样
Marsss
2018-08-21 15:44:03 +08:00
为什么我觉得完全不困惑。。。range(len(xxx)) 这就决定了数据类型啊。
wonderay
2018-08-22 09:42:24 +08:00
感觉各位都答偏了
i 并不代表 h 中的各个元素, 而是代表 从 0 到 len(h) - 1 的每个数字,其实是为了限定 heappop 的调用次数
Gordongg
2018-08-24 01:01:18 +08:00
这里的 for i in range(len(h)) 和 for _ in range(len(h)) 作用一样 都是循环 h 次的意思

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481779

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX