def countsort(alist):
maxi=alist[0]
for i in alist:
if i>maxi:
maxi=i
indexlist=[i for i in range(0,maxi+1)]
count=[alist.count(i) for i in indexlist]
sumcount=[0 for i in range(0,maxi+1)]
print(indexlist)
print(count)
sumcount=[count[i] if i==0 else count[i] + sumcount[i - 1] for i in range(0, len(sumcount))]
print(sumcount)
sorted_input=[0 for i in range(0,len(alist)+1)]
for i in alist:
sorted_input[sumcount[i]]=i
sumcount[i]-=1
return sorted_input[1:]
#count output = [0,0,1,0,2,0,0,0,1,1,1]
#expected sumcount output = [0,0,1,1,3,3,3,3,4,5,6]
#sumcount output using list comprehension = count
alist=[9,4,10,8,2,4]
s_l=countsort(alist)
print(s_l)
问题是如果我尝试使用列表推导式修改总和计数,索引值不会改变。为什么?为什么我不能通过列表推导同时修改和访问值?
我懒得摸索你的整个代码,但这是注释掉的代码和列表理解之间的区别:
当您在if
/else
构造中访问sumcount[i - 1]
时,sumcount
可能已经在索引i - 1
处更新。
使用列表推导,您始终索引到未修改的sumcount
,而不会在构建列表时对其进行更改。