为什么我不能使用列表理解填写计数排序中的总数?

时间:2018-08-24 12:11:28

标签: python list sorting list-comprehension counting-sort

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)

问题是,如果我尝试使用列表理解来修改总计数,则索引值不会更改。这是为什么?为什么我不能同时通过列表理解来修改和访问值?

1 个答案:

答案 0 :(得分:0)

我不介意使用您的整个代码,但这是注释掉的代码和列表理解之间的区别:

当您在sumcount[i - 1] / if构造中访问else时,sumcount可能已经在索引i - 1处进行了更新。

借助列表理解功能,您始终可以在构建列表时索引未经修改的sumcount而不对其进行更改。