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)
问题是,如果我尝试使用列表理解来修改总计数,则索引值不会更改。这是为什么?为什么我不能同时通过列表理解来修改和访问值?
答案 0 :(得分:0)
我不介意使用您的整个代码,但这是注释掉的代码和列表理解之间的区别:
当您在sumcount[i - 1]
/ if
构造中访问else
时,sumcount
可能已经在索引i - 1
处进行了更新。
借助列表理解功能,您始终可以在构建列表时索引未经修改的sumcount
而不对其进行更改。