Я хочу реализовать пузырьковую сортировку, используя понимание списка Python, но он отображается пустым - PullRequest
0 голосов
/ 02 июля 2019

Я хочу реализовать пузырьковую сортировку, используя понимание списка Python, но оно отображается пустым.Попытка использовать операторы присваивания для обмена (l[j]=l[j+1]), но выдает ошибку, поскольку понимание списка не поддерживает присваивание

l = [8, 1, 3, 5, 4, 6, 7, 2]
newlist= [ [(l[j],l[j+1]),(l[j+1],l[j])] for i in range(1,len(l)-1) for j in range(0,len(l)-1) if l[j]>l[j+1] ]

Ожидаемый вывод: 1, 2, 3, 4, 5, 6, 7, 8

Но я получаювыводится как [].

1 Ответ

1 голос
/ 02 июля 2019

Это происходит из-за концептуальной проблемы, которая заключается в том, что каждый отфильтрованный результат должен давать значение для включения в список.Ваше понимание списка не имеет возможности хранить промежуточные результаты - оно обречено на провал.Вы должны определить, следует ли выдавать значение и какое значение выдавать, учитывая только исходный список i и j.Эта информация не существует с помощью логики сортировки пузырьков.

Например, рассмотрим первую вложенную итерацию.У вас есть эта информация под рукой:

l = [8,1,3,5,4,6,7,2]
i = 1
j = 0

Учитывая это, вы должны решить прямо сейчас помещать информацию в наш окончательный список или нет, если да, то какую информацию помещатьтам.Вы не можете отложить это на второй проход, потому что у вас нет временного хранилища в понимании.

Видите проблему?

...