Почему print не печатает мой отсортированный массив

#python #arrays #sorting #for-loop

#python #массивы #сортировка #for-цикл

Вопрос:

Это мой исходный массив: a = [0, 4, 7, 8, 1, 3, 5, 2, 6]

и это то, что он печатает: [0, 4, 7, 0, 0, 0, 5, 0, 0]

 for i in a:
    pos = i
    min = a[i]
    for j in a:
        if a[j] < min:
            min = a[j]
            pos = j
        a[pos] = a[i]
        a[i] = min
print(a)
  

Комментарии:

1. Вы путаете значения списка с индексами списка, что возможно только потому, что все значения являются допустимыми индексами для списка. Если вы убедились, что это неверно (например, добавив 10 к каждому значению в вашем списке), то любая такая путаница вызовет исключение прямо в точке проблемы, а не позволит бессмысленным результатам сохраняться до конца кода.

Ответ №1:

Поскольку @’Lee Jun Wei’ не похоже, что ваш алгоритм правильный. Но может быть несколько других вещей, на которые следует обратить внимание.

Эти две строки выглядят не так.

 for i in a:
for j in a:
  

i и j принимают значение элементов a , а не значения индекса. Я думаю, вы имеете в виду

 for i in range(len(a)):
  

Причина, по которой вы получаете нули, заключается в том, что min инициализируется значением 0. Обратите внимание, что он равен нулю не из-за индекса, а потому, что 0 является первым значением в массиве. Как только min равно нулю, что является наименьшим значением в массиве в этой строке

 if a[j] < min:
  

Никогда не может быть правдой. Итак, эта строка

 a[i] = min
  

Устанавливает все в ноль. Каждый элемент не равен нулю, хотя бы потому, что [i] не является последовательным. Он перескакивает, потому что i — это значение элемента, а не индекс.

Ответ №2:

Хм, какой алгоритм сортировки вы пытаетесь реализовать? Если то, что вы пытаетесь сделать, это пузырьковая сортировка, это должно быть примерно так:

 a = [0, 4, 7, 8, 1, 3, 5, 2, 6]

n=len(a)

for i in range(n):
    for j in range(n-1):
        if a[j 1] < a[j]:
            min = a[j 1]
            a[j 1] = a[j]
            a[j] = min

print(a)
  

Комментарии:

1. Я собирался выполнить сортировку по выбору, но мне не хватало части n = leng

Ответ №3:

Вы не объяснили, что именно вы хотите, но если вы хотите отсортировать свой массив, например, с 45312 по 12345 …

 print(sorted(mylist))
  
 a=sorted(mylist)# store in a variable