Срезы python как правильно?

Я только начал изучать python и столкнулся проблемой ... Есть список со 100 и больше элементов мне нухно выбрать с 1 по 6 через 10 т. е. 1-6,11-16,21-26 и т.д.

mylist=list(range(200))
x = milist[0:6:10]
print(x)
выводит [0]

как записать правильно используя [::]


Ответы (3 шт):

Автор решения: MaxU

Одним срезом здесь не обойтись - их придется комбинировать - отдельно срезы для чисел, заканчивающихся на 1, потом на 2 и т.д.

Можно использовать остаток от деления (для неотрицательных чисел) - такое решение будет более элегантным:

res = [x for x in mylist if x % 10 < 7]

если в вашем списке будут и отрицательные числа, тогда можно сделать так - это будет работать как для положительных так и для отрицательных:

res = [x for x in mylist if abs(x) % 10 < 7]

немного извращенный вариант, который использует sum() и срезы:

res = sorted(sum((mylist[i:len(mylist):10] for i in range(7)), []))
→ Ссылка
Автор решения: Zhihar

вариант через срезы

data = [i for i in range(100)] # выборка для тестирования

res = []

for i in range(len(data) // 10 + 1):
    res += data[1 + 10 * i: 7 + 10 * i]

print(res)

более короткий вариант через срезы:

res = []

for i in range(1, len(data), 10):
    res += data[i: i + 6]

однострочный вариант (спасибо MaxU):

res = sum((data[i: i + 6] for i in range(1, len(data), 10)), [])
→ Ссылка
Автор решения: A_Vaclav

Вот так можно через срезы. В этом варианте не важно какой длинны список и не важно из каких данных, выведет из каждого десятка по шесть элементов начиная со следующего за начальным из текущего десятка...

mylist=list(range(200))
c = 0
res = []
while c < len(mylist):
    res += mylist[c+1:c+7:]
    c += 10
print(res)

И учтите что в Python нумерация индексов начинается с 0.

→ Ссылка