Ta myśl przyszła mi do głowy. Powiedz z jakiegokolwiek powodu, dla którego chcesz uzyskać unikalne elementy listy poprzez zrozumienie list w Pythonie.
[i if i in {created_comprehension} else 0 for i in [1, 2, 1, 2, 3]
[1, 2, 0, 0, 3]
Nie wiem, naprawdę nie mam na to żadnego celu, ale byłoby fajnie, gdyby można było mówić o zrozumieniu, gdy jest ono tworzone.
(na przykład. Jak usunąć zduplikowane elementy z listy przy użyciu funkcji sprawdzania list? to podobne pytanie)
Odpowiedzi:
1 dla odpowiedzi № 1Zastrzeżenie: to jest czysta spekulacja z mojej strony, i nie mam danych, aby go poprzeć
Nie sądzę, że możesz odwołać się do listyzrozumienie podczas budowania. Python najpierw utworzy listę, przydzieli pamięć lub ją i doda do niej elementy, zanim połączy ją z nazwą zmiennej. Dlatego myślę, że skończysz z NameError
jeśli spróbujesz odwołać się do listy, podczas gdy jest ona budowana na liście-comp
Dlatego możesz ostatecznie chcieć set
trzymać swoje unikaty i budować swoją listę od tego miejsca (o Boże, to jest hacky):
In [11]: L = [1, 2, 1, 2, 3]
In [12]: s = set(L)
In [13]: answer = [sub[0] for sub in [(i,s.remove(i)) if i in s else (0,0) for i in L]]
In [14]: answer
Out[14]: [1, 2, 0, 0, 3]
In [15]: s
Out[15]: set()
0 dla odpowiedzi nr 2
Zastrzeżenie: to tylko eksperyment. Porównam a list comprehension
i a list
wewnątrz a list comprehension
.
chcę x
zawierać elementy z [1,2,1,2,3,4,5]
tylko jeśli te elementy są w tym list comprehension
[e for e in range(3,6)]
które powinno być [3,4,5]
x = [i for a in [e for e in range(3,6)] for i in [1,2,1,2,3,4,5] if i == a]
Wynik jest prawidłowy:
[3, 4, 5]