Почему я не могу заполнить sumcount в Counting Sort, используя понимание списка? - PullRequest
0 голосов
/ 24 августа 2018
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)

Проблема в том, что если я пытаюсь изменить sumcount, используя понимание списка, значения индекса не меняются. Это почему? Почему я не могу одновременно изменять и получать доступ к значениям через понимание списка?

1 Ответ

0 голосов
/ 24 августа 2018

Я не могу потрудиться получить весь ваш код, но вот разница между закомментированным кодом и пониманием списка:

Когда вы получаете доступ к sumcount[i - 1] в if / else конструкция, sumcount, возможно, уже была обновлена ​​с индексом i - 1.

Имея понимание списка, вы всегда индексируете неизмененное sumcount, не изменяя его при построении списка.

...