Рассмотрим следующий код Python, с помощью которого я добавляю list2
все элементы с индексами от 1 до 3 из list1
:
for ind, obj in enumerate(list1):
if 4 > ind > 0:
list2.append(obj)
Как бы вы написали это, используя понимание списка, если бы у меня нет доступа к индексам через enumerate?
что-то типа:
list2 = [x for x in list1 if 4 > ind > 0]
но поскольку у меня нет ind
номера, будет ли это работать?
list2 = [x for x in enumerate(list1) if 4 > ind > 0]
python
list
list-comprehension
Пав Аметвич
источник
источник
list1[1:4]
здесь[x for x in list1[1:4]]
:?list2 = list1[1:4]
Ответы:
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]
. Если срезы могут стать довольно большими, лучше использовать islice, чтобы избежать копирования памяти.источник