Найти - Пользователи
Полная версия: Отсортировать список
Начало » Python для новичков » Отсортировать список
1
Malcolm1988
Здравствуйте!
Помогите пожалуйста решить задачку.
На вход идет набор чисел, при этом данные числа нужно отсортировать:
все числа, имеющие нечетное положение в списке идут по возрастанию, а другие числа (четное положение) по убыванию!

Пример input: 1 5 7 4 3 8 6 2
output: 1 8 3 5 6 4 7 2

Я правильно понял, что можно использовать if? например,
a=input().split()
for i in range(len(a)):
if i%2==0:
FishHook
Malcolm1988,
какую литературу по языку вы читали?
Malcolm1988
A Bite of Python и Лунца немного
FishHook
Читал обе этих книги, не могу взять в толк, какая из них научила вас так вот делать
for i in range(len(a)):
может быть вы мне покажите, где у Лутц учить так делать циклы?
Kon52
Malcolm1988
Я правильно понял, что можно использовать if?
Правильно, но i в приведённом вами примере должна служить индексом для элементов заданного списка.
Лутц:
>>> X = 'spam'
>>> len(X)                                                           # Длина строки
4
>>> list(range(len(X)))                                        # Все допустимые смещения в X
[0, 1, 2, 3]
>>>
>>> for i in range(len(X)): print(X[i],end=' ')       # Извлечение элементов вручную
...
s p a m

Перечитайте Лутца, глава в 4ом издании называется “Циклы while и for”.
FishHook
FishHook
l = [1, 5, 7, 4, 3, 8, 6, 2]
print(l[::2])
print(l[-1::-2])



vananabu
Malcolm1988
Вполне правильно думал. Только зря сразу же прибежал на форум. Лутц все доходчиво описывает. Вот код, но для списков с одним элементом выдаст ошибку. Сам додумай проверку.
l = [1, 5, 7, 4, 3, 8, 6, 2]
a = sorted(l[::2])
b = sorted(l[1::2], reverse=True)
c = [b.pop(0) if i%2 else a.pop(0) for i in range(len(l))]
FishHook
c = [b.pop(0) if i%2 else a.pop(0) for i in range(len(l))]

Совсем по питоньи будет зипнуть два списка, а потом этот список кортежей развернуть в один список.
Есть такой паттерн
from itertools import chain
l1 = [1, 2, 3, 4, 5]
l2 = [5, 6, 7, 34, 3]
l = zip(l1, l2)
print(l)
print(list(chain.from_iterable(l)))
vananabu
верно. не до конца докрутил решение) твой вариант больше true pythonic.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB