Rozważmy następujący kod Pythona, za pomocą którego dodaję nowe list2
wszystkie elementy o indeksach od 1 do 3 list1
:
for ind, obj in enumerate(list1):
if 4 > ind > 0:
list2.append(obj)
Jak byś to napisał, używając funkcji rozumienia list, skoro nie mam dostępu do indeksów poprzez wyliczanie?
coś jak:
list2 = [x for x in list1 if 4 > ind > 0]
ale skoro nie mam ind
numeru, czy to zadziała?
list2 = [x for x in enumerate(list1) if 4 > ind > 0]
python
list
list-comprehension
Pav Ametvic
źródło
źródło
list1[1:4]
tutaj[x for x in list1[1:4]]
:?list2 = list1[1:4]
Odpowiedzi:
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
źródło
Jeśli używasz
enumerate
, możesz zrobić mieć dostęp do indeksu:list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
źródło
O ile twój prawdziwy przypadek użycia nie jest bardziej skomplikowany, powinieneś po prostu użyć wycinka listy zgodnie z sugestią @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']
W bardziej skomplikowanych przypadkach - jeśli faktycznie nie potrzebujesz indeksu - jaśniej jest iterować po wycinku lub wysepce
list2 = [x*2 for x in list1[1:4]]
lub
from itertools import islice list2 = [x*2 for x in islice(list1, 1, 4)]
Na małe plasterki proste
list1[1:4]
. Jeśli plasterki mogą stać się dość duże, lepiej użyć islice, aby uniknąć kopiowania pamięciźródło