Форум сайта python.su
Здравствуйте!
Помогите пожалуйста решить задачку.
На вход идет набор чисел, при этом данные числа нужно отсортировать:
все числа, имеющие нечетное положение в списке идут по возрастанию, а другие числа (четное положение) по убыванию!
Пример 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:
…
Отредактировано Malcolm1988 (Сен. 21, 2015 16:29:04)
Офлайн
Malcolm1988,
какую литературу по языку вы читали?
Офлайн
A Bite of Python и Лунца немного
Офлайн
Читал обе этих книги, не могу взять в толк, какая из них научила вас так вот делать
for i in range(len(a)):
Офлайн
Malcolm1988Правильно, но i в приведённом вами примере должна служить индексом для элементов заданного списка.
Я правильно понял, что можно использовать if?
>>> 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
Отредактировано Kon52 (Сен. 21, 2015 22:43:53)
Офлайн
Офлайн
l = [1, 5, 7, 4, 3, 8, 6, 2] print(l[::2]) print(l[-1::-2])
Офлайн
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))]
Офлайн
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)))
Офлайн
верно. не до конца докрутил решение) твой вариант больше true pythonic.
Отредактировано vananabu (Сен. 25, 2015 09:38:09)
Офлайн