возможно ли понимание списка Python с доступом к индексу / перечислению?


рассмотрим следующий код Python, с помощью которого я добавляю в новый list2 все элементы с индексами от 1 до 3 из list1:

for ind, obj in enumerate(list1):
    if 4> ind > 0: list2.append(obj)

как бы вы написали это, используя понимание списка python, если у меня нет доступа к индексам через enumerate?

что-то типа:

list2 = [x for x in list1 if 4>ind>0]

но так как у меня нет номера "ind", будет ли это работать? :

list2 = [x for x in enumerate(list1) if 4>ind>0]
3 58

3 ответа:

list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]

Если вы используете enumerate, вы do есть доступ к индексу:

list2 = [x for ind, x in enumerate(list1) if 4>ind>0]

если ваш реальный вариант использования не является более сложным, вы должны просто использовать срез списка, как предложено @wim

>>> list1 = ['zero', 'one', 'two', 'three', 'four', 'five', 'six']
>>> [x for ind, x in enumerate(list1) if 4 > ind > 0]
['one', 'two', 'three']
>>> list1[1:4]
['one', 'two', 'three']

для более сложных случаев - если вам на самом деле не нужен индекс - яснее перебирать срез или islice

list2 = [x*2 for x in list1[1:4]]

или

from itertools import islice
list2 = [x*2 for x in islice(list1, 1, 4)]

для маленьких кусочков, простой list1[1:4]. Если срезы могут стать довольно большими, возможно, лучше использовать islice, чтобы избежать копирования памяти