considérez ce qui suit Python avec lequel j'ajoute dans une nouvelle liste2 tous les éléments avec des indices de 1 à 3 de liste1:
for ind, obj in enumerate(list1):
if 4> ind > 0: list2.append(obj)
comment écririez-vous ceci en utilisant python liste de compréhension, si je n'ai pas accès aux index par énumération?
quelque chose comme:
list2 = [x for x in list1 if 4>ind>0]
mais puisque je n'ai pas de numéro 'ind', cela fonctionnerait-il? :
list2 = [x for x in enumerate(list1) if 4>ind>0]
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
Si vous utilisez enumerate
, vous do avez accès à l'index:
list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
À moins que votre cas d'utilisation réel ne soit plus compliqué, vous devriez 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 complexes - si vous n'avez pas réellement besoin de l'index - il est plus facile d'itérer sur une tranche ou une tranche
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 volumineuses, il peut être préférable d’utiliser une glissière pour éviter de copier la mémoire.