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

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

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

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

что-то вроде:

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

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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

Если ваш реальный вариант использования более сложный, вы должны просто использовать список, предложенный @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']

Для более сложных случаев - если вам действительно не нужен индекс - он более ясен, чтобы перебирать фрагмент или фрагмент

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]. Если срезы могут стать довольно большими, лучше использовать искусственную оболочку, чтобы избежать копирования памяти.