Сортировка разных частей списка по возрастанию и по убыванию

Как сортировать список по 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

Несколько вариантов:

  1. Идете циклом 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)
  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)
  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))
→ Ссылка