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]
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
Wenn Sie enumerate
verwenden, haben Sie do Zugriff auf den Index:
list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
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