Python 3 Бесконечный цикл с пузырьковой сортировкой
У меня есть проблема, когда мне пришлось отсортировать список номеров, что я сделал хорошо. Но затем я должен поместить в список 5 самых больших чисел в списке, и я должен отметить, что есть повторяющиеся числа. Однако, когда я пытаюсь это сделать, ничего не печатается. Если я попытаюсь напечатать "count", будет напечатано только бесконечное число растущих чисел. Что я делаю неправильно?
list = [8,3,7,4,2,1,6,5,10,9,3,9,6,7,5]
def sortList(list):
switch = 1
temp = int(0)
while (switch != 0):
switch = 0
for i in range(len(list)-1):
if list[i] > list[i+1]:
temp = list[i]
list[i] = list[i+1]
list[i+1] = temp
switch = 1
# здесь моя проблема
count = int(0)
expensive5 = []
while count != 5:
for i in range(len(list)-1, 0, -1):
if float(list[i]) > float(list[i-1]):
expensive5.append(list[i])
count += 1
#if i print count here, I get an infinite number of increasing numbers
print(expensive5)
sortList(list)
3 ответа
Проблема в том, что ваш count
переменная проходит 5 в первый раз через for
петля, так count
никогда не равен 5, когда цикл while проверяет свое состояние. Чтобы это исправить, вам нужно переместить чек во внутренний цикл следующим образом:
count = int(0)
expensive5 = []
for i in range(len(list)-1, 0, -1):
if float(list[i]) > float(list[i-1]):
expensive5.append(list[i])
count += 1
#if i print count here, I get an infinite number of increasing numbers
if count == 5: break
print(expensive5)
Вместо подсчета, я предлагаю просто использовать наборы, а затем использовать нарезку, чтобы получить нужные числа в списке.
expensive5 = bubble_sort(list(set(l)))[:-6:-1]
print(expensive5)
Также предлагаю не использовать list
в качестве имени переменной, так как это функция по умолчанию для преобразования в тип list
, Здесь я использую переменную l
вместо.
l = [8,3,7,4,2,1,6,5,10,9,3,9,6,7,5]
def sortList(l):
switch = 1
temp = int(0)
while (switch != 0):
switch = 0
for i in range(len(l)-1):
if l[i] > l[i+1]:
temp = l[i]
l[i] = l[i+1]
l[i+1] = temp
switch = 1
return l
Вы можете использовать набор, чтобы получить только уникальные элементы в списке, так как список отсортирован, вы можете получить 5 старших чисел, например:
l = [8,3,7,4,2,1,6,5,10,9,3,9,6,7,5]
def bubble_sort(l):
changed = True
while changed:
changed = False
for i in range(len(l) - 1):
if l[i] > l[i+1]:
l[i], l[i+1] = l[i+1], l[i]
changed = True
return l
print(list(set(bubble_sort(l)))[-5:]) #[6, 7, 8, 9, 10]
Попробуй это здесь!
Другие общие советы:
- Используйте snake_case в python, а не camelCase