/ / Python: Odnosząc się do zrozumienia list na samym początku listy? - python, list, spis-zrozumienie

Python: Odnosząc się do zrozumienia list na samym początku listy? - python, list, spis-zrozumienie

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 № 1

Zastrzeż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]