Сортировка разных частей списка по возрастанию и по убыванию
Как сортировать список по 10 элементов (первый десяток по возрастанию, второй по убыванию)?
Пытался сделать так, но он берет каждые 10 элементов, а я не могу понять как сделать каждые 10 через 10:
list_1 = [randint(1, 1000) for i in range(40)]
for i in range(0, len(list_1), 10):
print(sorted(list_1[i: i+10]))
print(sorted(list_1[i: i+10], reverse=True))
Ответы (2 шт):
Автор решения: insolor
→ Ссылка
Несколько вариантов:
- Идете циклом for по индексам с шагом 10, проверяете четная это десятка или нечетная, сортируете, записываете на исходное место:
from random import randint
list_1 = [randint(1, 1000) for i in range(40)]
for i in range(0, len(list_1), 10):
if i // 10 % 2 == 0:
list_1[i: i+10] = sorted(list_1[i: i+10])
else:
list_1[i: i+10] = sorted(list_1[i: i+10], reverse=True)
print(list_1)
- То же самое, только вместо if подставляете проверку четности/нечетности десятки в параметр reverse:
from random import randint
list_1 = [randint(1, 1000) for i in range(40)]
for i in range(0, len(list_1), 10):
list_1[i: i+10] = sorted(list_1[i: i+10], reverse=(i // 10 % 2 != 0))
print(list_1)
- Идете циклом не с шагом 10, а с шагом 20, внутри каждой двадцатки первую десятку сортируете по возрастанию, вторую - по убыванию:
from random import randint
list_1 = [randint(1, 1000) for i in range(40)]
for i in range(0, len(list_1), 20):
list_1[i: i+10] = sorted(list_1[i: i+10])
list_1[i+10: i+20] = sorted(list_1[i+10: i+20], reverse=True)
print(list_1)
Автор решения: Namerek
→ Ссылка
from random import randint
c11 = [randint(1, 1000) for i in range(40)]
step = 10
for i in range(0, len(c11), step):
s = slice(i, i + step)
c11[s] = sorted(c11[s], reverse=i % (step * 2))