Подтвердить что ты не робот

Извлечение элементов списка на нечетных позициях

Итак, я хочу создать список, который является подсписком какого-либо существующего списка.

Например,

L = [1, 2, 3, 4, 5, 6, 7], я хочу создать подсписку li, чтобы li содержал все элементы в L в нечетных положениях.

Пока я могу сделать это

L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
    if count % 2 == 1:
        li.append(i)
    count += 1

Но я хочу знать, есть ли другой способ сделать то же самое эффективно и с меньшим количеством шагов.

4b9b3361

Ответ 1

Решение

Да, вы можете:

l = L[1::2]

И это все. Результат будет содержать элементы, размещенные на следующих позициях (0, поэтому первый элемент находится в позиции 0, второй - при 1 и т.д.):

1, 3, 5

поэтому результатом (действительные числа) будет:

2, 4, 6

Описание

[1::2] в конце - это всего лишь обозначение для сортировки списка. Обычно он находится в следующем виде:

some_list[start:stop:step]

Если мы опустим start, будет использоваться значение по умолчанию (0). Таким образом, будет выбран первый элемент (в позиции 0, поскольку индексы 0). В этом случае будет выбран второй элемент.

Поскольку второй элемент опущен, используется значение по умолчанию (конец списка). Таким образом, список повторяется со второго элемента до конца.

Мы также предоставили третий аргумент (step), который равен 2. Это означает, что будет выбран один элемент, следующий будет пропущен и так далее...

Итак, чтобы подвести итог, в этом случае [1::2] означает:

  • возьмите второй элемент (который, кстати, является нечетным элементом, если вы судите по индексу),
  • пропустите один элемент (потому что у нас есть step=2, поэтому мы пропускаем один, как в отличие от step=1, который по умолчанию),
  • возьмите следующий элемент,
  • Повторите шаги 2.-3. пока не будет достигнут конец списка,

РЕДАКТИРОВАТЬ: @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 для циклов

Ответ 2

Для нечетных позиций вы, вероятно, хотите:

>>>> list_ = list(range(10))
>>>> print list_[1::2]
[1, 3, 5, 7, 9]
>>>>

Ответ 3

Мне нравятся списки из-за их синтаксиса Math (Set). Как насчет этого:

L = [1, 2, 3, 4, 5, 6, 7]
odd_numbers = [y for x,y in enumerate(L) if x%2 != 0]
even_numbers = [y for x,y in enumerate(L) if x%2 == 0]

Как правило, если вы перечислите список, вы получите индекс x и значение y. Здесь я помещаю значение y в список вывода (четное или нечетное) и использую индекс x, чтобы определить, является ли эта точка нечетной (x%2 != 0).

Ответ 4

list_ = list (range (9)) Печать (list_ [1 :: 2])