Considere el siguiente código de Python con el que agrego en un nuevo list2
todos los elementos con índices del 1 al 3 de list1
:
for ind, obj in enumerate(list1):
if 4 > ind > 0:
list2.append(obj)
¿Cómo escribiría esto usando la comprensión de listas, si no tengo acceso a los índices a través de enumerate?
algo como:
list2 = [x for x in list1 if 4 > ind > 0]
pero como no tengo ind
número, ¿funcionaría esto?
list2 = [x for x in enumerate(list1) if 4 > ind > 0]
python
list
list-comprehension
Pav Ametvic
fuente
fuente
list1[1:4]
aquí[x for x in list1[1:4]]
:?list2 = list1[1:4]
Respuestas:
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
fuente
Si se utiliza
enumerate
, se haga tener acceso al índice:list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
fuente
A menos que su caso de uso real sea más complicado, solo debe usar un segmento de lista como lo sugiere @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']
Para casos más complicados, si realmente no necesita el índice, es más claro iterar sobre un segmento o un segmento.
list2 = [x*2 for x in list1[1:4]]
o
from itertools import islice list2 = [x*2 for x in islice(list1, 1, 4)]
Para rodajas pequeñas, lo simple
list1[1:4]
. Si los cortes pueden volverse bastante grandes, puede ser mejor usar un corte para evitar copiar la memoria.fuente