Załóżmy, że mam taką listę:
mylist = ["a","b","c","d"]
Aby uzyskać wydrukowane wartości wraz z ich indeksem, mogę użyć enumerate
funkcji Pythona w ten sposób
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Teraz, kiedy próbuję użyć go wewnątrz a list comprehension
, pojawia się ten błąd
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Tak więc moje pytanie brzmi: jaki jest prawidłowy sposób używania rozumienia wyliczeń wewnątrz listy?
python
list
iteration
list-comprehension
RanRag
źródło
źródło
,
nie()
. Zatem „umieszczaniei,j
wewnątrz krotki” nie ma sensu, ponieważi,j
już jest krotką! Problem polega na tym, że parser kompilacji listy potrzebuje parens dla grupy instrukcji.Żeby było naprawdę jasne, nie ma to nic wspólnego ze
enumerate
składnią rozumienia list, a wszystko to.Ta lista zwraca listę krotek:
to lista nakazów:
lista list:
błąd składniowy:
Co jest niespójne (IMHO) i mylące ze składnią wyrażeń słownikowych:
I zestaw krotek:
Jak stwierdził Óscar López, możesz po prostu przekazać bezpośrednio wyliczoną krotkę:
źródło
Lub, jeśli nie nalegasz na rozumienie listy:
źródło
Jeśli używasz długich list, ich rozumienie jest szybsze, nie wspominając o bardziej czytelnej formie.
źródło
[t for t in enumerate(my list)]
jest jeszcze szybszy.Oto sposób, aby to zrobić:
Alternatywnie możesz:
Powodem, dla którego pojawił się błąd, był brak znaku () dookoła
i
ij
utworzenie krotki.źródło
Mów wyraźnie o krotkach.
źródło
Wszystkie świetne odpowiedzi. Wiem, że pytanie jest specyficzne dla wyliczenia, ale co powiesz na coś takiego, tylko z innej perspektywy
Staje się potężniejszy, jeśli trzeba iterować wiele list równolegle pod względem wydajności. Tylko myśl
źródło