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, используя понимание списка, значения индекса не изменяются. Это почему? Почему я не могу одновременно изменять и получать доступ к значениям через понимание списка?
Я не могу беспокоить весь ваш код, но здесь разница между прокомментированным кодом и пониманием списка:
Когда вы sumcount[i - 1]
доступ к sumcount[i - 1]
в конструкции if
/else
, sumcount
может быть уже обновлена с индексом i - 1
.
Благодаря пониманию списка вы всегда sumcount
на немодифицированную sumcount
не sumcount
ее при создании списка.
sumcount
на этот новый список. Вы не изменяете старый sumcount
пока выполняется понимание списка.