Ответ 1
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
рассмотрим следующий код 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]
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
Если вы используете enumerate
, у вас есть доступ к индексу:
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']
Для более сложных случаев - если вам действительно не нужен индекс - он более ясен, чтобы перебирать фрагмент или фрагмент
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]
. Если срезы могут стать довольно большими, лучше использовать искусственную оболочку, чтобы избежать копирования памяти.