Решение
Да, ты можешь:
l = L[1::2]
И это все. Результат будет содержать элементы, размещенные в следующих позициях (на 0
основе -основе, поэтому первый элемент находится в позиции 0
, второй в позиции и 1
т. Д.):
1, 3, 5
поэтому результат (фактические числа) будет:
2, 4, 6
Объяснение
В [1::2]
конце - просто обозначение для нарезки списка. Обычно он бывает в следующем виде:
some_list[start:stop:step]
Если мы не укажем start
, 0
будет использоваться default ( ). Таким образом, будет выбран первый элемент (в позиции 0
, потому что индексы основаны на 0
-основе). В этом случае будет выбран второй элемент.
Поскольку второй элемент опущен, используется значение по умолчанию (конец списка). Итак, список перебирается от второго элемента до конца .
Мы также предоставили третий аргумент ( step
), который есть 2
. Это означает, что один элемент будет выбран, следующий будет пропущен и так далее ...
Итак, в данном случае [1::2]
означает:
- возьмите второй элемент (который, кстати, нечетный, если судить по индексу),
- пропустить один элемент (потому что у нас есть
step=2
, поэтому мы пропускаем один, а не по step=1
умолчанию),
- возьмите следующий элемент,
- Повторите шаги 2.-3. пока не будет достигнут конец списка,
EDIT : @PreetKukreti дал ссылку для другого объяснения нотации среза списка Python. См. Здесь: Объяснение нотации фрагментов Python
Дополнительно - замена счетчика на enumerate()
В вашем коде вы явно создаете и увеличиваете счетчик. В Python в этом нет необходимости, так как вы можете перечислить некоторые итерации, используя enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Вышеупомянутое служит точно той же цели, что и код, который вы использовали:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Подробнее об эмуляции for
циклов со счетчиком в Python: Доступ к индексу в Python циклов for