Как отсортировать первую половину по возрастанию, а вторую половину по убыванию в питоне? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть список питонов [1,2,3,4,5]. Я должен напечатать [1,2,3,4,5,5,4,3,2,1].

Подскажите, пожалуйста, как это сделать в цикле (пока или для)

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Попробуйте это:

a, b = eval('[1,2,3,4,5],'*2);b.reverse();print(a+b)

выход:

C:\Users\Desktop>py x.py
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
0 голосов
/ 01 ноября 2018

Использование цикла for:

>>> l = [1, 2, 3, 4, 5]
>>> res = []
>>> for e in reversed(l):
...     res.append(e)
...     res.insert(0, e)
>>> res
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]

В случае, если список не отсортирован, вместо reversed используйте sorted с обратным флагом, установленным на True

>>> l = [4, 3, 1, 5, 2]
>>> res = []
>>> for e in sorted(l, reverse=True):
...     res.append(e)
...     res.insert(0, e)
... 
>>> res
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]

И, для более эффективной версии, я бы предложил использовать итераторы:

>>> import itertools
>>> l = sorted([4, 3, 1, 5, 2])
>>> res = list(itertools.chain(l, reversed(l)))
>>> res
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
0 голосов
/ 01 ноября 2018

Как вы говорите, это отсортированный список (верно?), Так же:

print(l+l[::-1])

Или:

print(l+reversed(l))

В обоих случаях вывод:

[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
0 голосов
/ 01 ноября 2018

Вам не нужен цикл. Просто отсортируйте и объедините исходный список с обратным списком.

a = [2, 1, 5, 4, 3]
a = sorted(a)
print(a + a[::-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...