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