Considérez le code Python suivant avec lequel j'ajoute dans un nouveau list2
tous les éléments avec des indices de 1 à 3 sur list1
:
for ind, obj in enumerate(list1):
if 4 > ind > 0:
list2.append(obj)
Comment écririez-vous cela en utilisant la compréhension de liste, si je n'ai pas accès aux index via enumerate?
quelque chose comme:
list2 = [x for x in list1 if 4 > ind > 0]
mais puisque je n'ai pas de ind
numéro, cela fonctionnerait-il?
list2 = [x for x in enumerate(list1) if 4 > ind > 0]
python
list
list-comprehension
Pav Ametvic
la source
la source
list1[1:4]
ici[x for x in list1[1:4]]
:?list2 = list1[1:4]
Réponses:
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
la source
Si vous utilisez
enumerate
, vous n'avez accès à l'index:list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
la source
À moins que votre cas d'utilisation réel ne soit plus compliqué, vous devez simplement utiliser une tranche de liste comme suggéré par @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']
Pour les cas plus compliqués - si vous n'avez pas réellement besoin de l'index - il est plus clair d'itérer sur une tranche ou une islice
list2 = [x*2 for x in list1[1:4]]
ou
from itertools import islice list2 = [x*2 for x in islice(list1, 1, 4)]
Pour les petites tranches, le simple
list1[1:4]
. Si les tranches peuvent devenir assez grandes, il peut être préférable d'utiliser une islice pour éviter de copier la mémoirela source