Python语法/理解
因此,在上面的代码中,我不理解我用“困惑”标记的那一行,在最后一行之前有4行。 可能是因为我对python不熟悉,或者只是太笨了Python语法/理解,python,algorithm,sorting,counting,Python,Algorithm,Sorting,Counting,因此,在上面的代码中,我不理解我用“困惑”标记的那一行,在最后一行之前有4行。 可能是因为我对python不熟悉,或者只是太笨了 在第一个案例中发生了什么?当范围为[]时。。。“对于空数组范围内的每个c…” 我也没有在下面的行中得到array[i]=a。如果a是计数数组中可能为零的第一个元素,如何添加它…?真的很困惑 干杯 range将为您提供一个包含指定起始值和结束值的列表 def counting_sort(array, maxval): """in-place counting s
array[i]=a
。如果a是计数数组中可能为零的第一个元素,如何添加它…?真的很困惑range
将为您提供一个包含指定起始值和结束值的列表
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]
将打印
print range(5)
当你说,range(m)
或range(count[a])
时,它将生成一个列表,直到m
或count[a]
从0开始数组[i]=a
在范围(m)
中,对于每个元素,代码检查计数[a]
。如果计数[a]
为0,则不会执行第二个循环。(范围(0)
将生成一个空列表),因此当a
为0时,将不执行数组[i]=a显然,您已经计算出
count[a]
将为0,因此range(count[a])
将为[]
for i in []:
do_stuff(i)
那么,你要问的是,这是做什么的:
[0, 1, 2, 3, 4]
答案是它在0元素中的每一个元素上循环,换句话说,它根本不循环,只是什么都不做*
以下文件对此进行了解释:
…然后,当项目用尽时(即序列为空时),对迭代器提供的每个项目执行一次套件……循环终止
这就隐含了你的第二点困惑: 如果a是计数数组中可能为零的第一个元素,如何添加它 当
count[a]
为0时,您将永远不会进入循环,因此不会出现这种情况
*如果
for
语句有一个else
子句,它确实会运行else
子句。我简化了代码的一部分,也许它可以帮助您更好地理解算法的核心。在计算数组中的所有元素后,我们只能使用count[]中存储的信息重建排序数组
for i in []:
do_stuff(i)