Предположим, у меня есть этот список:

newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]]

Я хочу отсортировать его таким образом, чтобы каждый список был отсортирован. Например:

newlis = [[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]]

Я пытался написать этот код:

for i in range(len(newlis)):
    if j in newlis[i] < newlis[i+1]:
        newlis[i],newlis[i+1]=newlis[i+1],newlis[i]
print newlis

Однако это не работает. Может кто-нибудь, пожалуйста, помогите мне? Встроенные функции не допускаются.

-3
Zee 21 Июл 2015 в 20:21
1
Почему не разрешены встроенные функции?
 – 
Alex Riley
21 Июл 2015 в 20:24
Попробуйте прочитать об алгоритмах сортировки.
 – 
raymelfrancisco
21 Июл 2015 в 20:26
3
Мне бы очень хотелось просто реализовать сортировку слиянием, а затем сделать что-то вроде newlis = [mergesort(i) for i in newlis]
 – 
NightShadeQueen
21 Июл 2015 в 20:26
1
Или пузырьковая сортировка... пузырьковая сортировка очень проста
 – 
Joran Beasley
21 Июл 2015 в 20:36

2 ответа

Здесь много неправильных вещей (в том числе то, что это звучит как вопрос домашнего задания, и мы не должны на него отвечать), но я дам вам несколько полезных советов: вы сравниваете элемент J в списке I со списком I + 1. .

Вы хотели бы сравнить элемент J в списке I с элементом J + 1 в списке I.

Кроме того, вы, похоже, пытаетесь сортировать в обратном порядке. Вы получите большой левый и маленький правый.

Также это не алгоритм сортировки. Что происходит, когда у вас есть массив вроде

[3,6,4,10] => [6,4,10,3]

Который до сих пор не заказан, вообще. Алгоритмы сортировки просты, но не настолько. Я рекомендую поискать их.

2
Javeed 21 Июл 2015 в 20:30
Кроме того, проверьте свой синтаксис, вы пытались сократить этот внутренний цикл, но j в списке i ничего не возвращает. Правильный синтаксис будет for j in range(len(i) - 1): if i[j] < i[j+1].... но это не главное необходимое исправление.
 – 
Javeed
21 Июл 2015 в 20:32

В if j in newlis[i] < newlis[i+1]: вы сравниваете подсписки, а не элементы самих подсписков. Вам нужны два цикла: один для итерации newlis, а другой для сортировки элементов каждого подсписка newlis.

Пример использования пузырьковой сортировки:

Вы можете проверить это здесь:

>>> newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]]

>>> for sublist in newlis:
...     for i in range(len(sublist) - 1):
...         if sublist[i] > sublist[i + 1]:
...             sublist[i], sublist[i + 1] = sublist[i + 1], sublist[i]

>>> print(newlis)
[[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]]

Ссылки о сортировке пузырьком:

http://www-ee.eng.hawaii.edu/~tep/EE160/Book/chap10/subsection2.1.2.2.html http://www.go4expert.com/articles/bubble-sort-algorithm-absolute-beginners-t27883/

0
raymelfrancisco 21 Июл 2015 в 20:48