为什么我无法使用列表推导在计数排序中填写总和计数?


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,而不会在构建列表时对其进行更改。

相关内容

  • 没有找到相关文章

最新更新