/ / Python: Verweis auf ein Listenverständnis im Listenverständnis selbst? - Python, Liste, Listenverständnis

Python: Bezieht man sich auf ein Listenverständnis im Listenverständnis selbst? - Python, Liste, Listenverständnis

Dieser Gedanke kam mir gerade in den Sinn. Sagen Sie, aus welchem ​​Grund Sie die eindeutigen Elemente einer Liste über ein Listenverständnis in Python erhalten möchten.

[i if i in {created_comprehension} else 0 for i in [1, 2, 1, 2, 3]

[1, 2, 0, 0, 3]

Ich habe keine Ahnung, ich habe nicht wirklich einen Zweck dafür, aber es wäre cool, wenn man auf das Verständnis verweisen könnte, während es geschaffen wird.

(z.B. Wie entferne ich doppelte Elemente mithilfe des Listenverständnisses aus einer Liste? ist eine ähnliche Frage)

Antworten:

1 für die Antwort № 1

Haftungsausschluss: Dies ist rein Spekulation meinerseits, und ich habe keine Daten, um es zu sichern

Ich glaube nicht, dass Sie sich auf eine Liste beziehen könnenVerständnis wie es gebaut wird. Python muss zuerst die Liste erstellen, Speicher oder sie zuweisen und Elemente hinzufügen, bevor sie an einen Variablennamen gebunden wird. Daher denke ich, dass Sie am Ende mit einer NameError wenn Sie versuchen, auf die Liste zu verweisen, während sie in einer Listenkomponente erstellt wird

Vielleicht möchten Sie also letztendlich eine set um Ihre Unikate zu halten und Ihre Liste von dort aus aufzubauen (Oh Gott, das ist hackig):

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 für die Antwort № 2

Haftungsausschluss: Dies ist nur ein Experiment. Ich vergleiche ein list comprehension und ein list in einem list comprehension.

Ich will x Elemente aus enthalten [1,2,1,2,3,4,5] nur wenn diese Elemente in diesem enthalten sind list comprehension [e for e in range(3,6)] was sein sollte [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]

Die Ausgabe ist richtig:

[3, 4, 5]