gpt4 book ai didi

Python语法/理解

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:09 25 4
gpt4 key购买 nike

def counting_sort(array, maxval):
"""in-place counting sort"""
m = maxval + 1
count = [0] * m # init with zeros
for a in array:
count[a] += 1 # count occurences
i = 0
for a in range(m): # emit
for c in range(count[a]): # - emit 'count[a]' copies of 'a' #CONFUSED
array[i] = a
i += 1
return array

print counting_sort( [1, 4, 7, 2, 1, 3, 2, 1, 4, 2, 3, 2, 1], 7 )
# prints: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 7]

所以在上面的代码中,我不理解我标记为混淆的行,在最后一行之前的 4 行。可能是因为我是 python 的新手或者只是愚蠢。

  1. 第一种情况发生了什么?当范围是 [ ] 时? ... "对于空数组范围内的每个 c...?
  2. 我也没有在下面的行中得到 array[i] = a。如果 a 是计数数组中可能为零的第一个元素,如何添加它......?真的很困惑...

干杯!

最佳答案

您显然已经知道 count[a] 将为 0,因此 range(count[a]) 将为 [].

那么,您要问的是,这是做什么的:

for i in []:
do_stuff(i)

答案是它遍历每个 0 元素——换句话说,它根本不循环。它什么都不做。*

the for statement 的文档对此进行了解释:

… The suite is then executed once for each item provided by the iterator… When the items are exhausted (which is immediately when the sequence is empty…) … the loop terminates.


这隐含地解释了您的第二个困惑:

If a is the first element in the counting array which might be zero, how can it be added

count[a] 为 0 时,您永远不会进入循环,因此永远不会出现这种情况。


* 如果 for 语句有一个 else 子句,它会运行 else 子句。

关于Python语法/理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com