it-swarm.com.de

ist Python Listenverständnis mit Zugriff auf den Index / Aufzählung möglich?

betrachten Sie den folgenden Python Code, mit dem ich in einer neuen Liste2 alle Elemente mit den Indizes 1 bis 3 von Liste1 hinzufüge:

for ind, obj in enumerate(list1):
    if 4> ind > 0: list2.append(obj)

wie würden Sie dies mit python Listenverständnis schreiben, wenn ich über Enumerate keinen Zugriff auf die Indizes habe?

so etwas wie:

list2 = [x for x in list1 if 4>ind>0]

aber da ich keine 'ind'-nummer habe, würde das funktionieren? :

list2 = [x for x in enumerate(list1) if 4>ind>0]
73
Pav Ametvic
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
148
Pavel Anossov

Wenn Sie enumerate verwenden, haben Sie do Zugriff auf den Index:

list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
31
BrenBarn

Sofern Ihr tatsächlicher Anwendungsfall nicht komplizierter ist, sollten Sie nur einen von @wim vorgeschlagenen Listenausschnitt verwenden

>>> 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']

In komplizierteren Fällen - wenn Sie den Index nicht wirklich benötigen - ist es klarer, über ein Slice oder eine Islice zu iterieren

list2 = [x*2 for x in list1[1:4]]

oder

from itertools import islice
list2 = [x*2 for x in islice(list1, 1, 4)]

Für kleine Scheiben kann das einfache list1[1:4]. Wenn die Slices sehr groß werden können, ist es möglicherweise besser, eine Islice zu verwenden, um das Kopieren des Speichers zu vermeiden

6
John La Rooy