Срезы 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 шт):
Одним срезом здесь не обойтись - их придется комбинировать - отдельно срезы для чисел, заканчивающихся на 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)), []))
вариант через срезы
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)), [])
Вот так можно через срезы. В этом варианте не важно какой длинны список и не важно из каких данных, выведет из каждого десятка по шесть элементов начиная со следующего за начальным из текущего десятка...
mylist=list(range(200))
c = 0
res = []
while c < len(mylist):
res += mylist[c+1:c+7:]
c += 10
print(res)
И учтите что в Python нумерация индексов начинается с 0.