Hi Leute, mir fehlen grade die Worte, um nach dem Problem zu googeln.
vllt bin ich auch grad bisschen braintot...
und Zwar mein Problem:
a = [1, 2, 3]
b = [2, 4, 5]
nun möchte ich die Liste a updaten... aber ohne dass er die 2 nich noch einmal in die Liste a mit einfügt.
Ergebnis sollte dann so aussehen:
a = [1, 2, 3, 4, 5]
wahrscheinlich ists total einfach aber ich komm einfach nicht drauf
lg Ping
Listen update
- __blackjack__
- User
- Beiträge: 13107
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Falls es auf die Reihenfolge ankommt, würde ich `itertools.chain()` und `more_itertools.unique_everseen()` kombinieren:
Code: Alles auswählen
In [15]: a
Out[15]: [1, 2, 3]
In [16]: b
Out[16]: [2, 4, 5]
In [17]: list(unique_everseen(chain(a, b)))
Out[17]: [1, 2, 3, 4, 5]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 5
- Registriert: Freitag 26. April 2019, 03:00
Danke euch für die schnelle Antwort. Nun habe ich doch schon eine Lösung gefunden...
list1 = ["cat", "car", "mouse"]
list2 = ["mouse", "house"]
# c = [item for item in a if item not in b]
d = [item for item in list2 if item not in list1]
print("list1", list1)
print("Liste ohne gleiche Elemente =", d)
list1 = list1 + d
print("list1", list1)
Wie schließt man einen Beitrag?
list1 = ["cat", "car", "mouse"]
list2 = ["mouse", "house"]
# c = [item for item in a if item not in b]
d = [item for item in list2 if item not in list1]
print("list1", list1)
print("Liste ohne gleiche Elemente =", d)
list1 = list1 + d
print("list1", list1)
Wie schließt man einen Beitrag?
-
- User
- Beiträge: 5
- Registriert: Freitag 26. April 2019, 03:00
FRAGE: Bei mir erkennt er unique_everseen und chain nicht. muss ich dazu irgendetwas importieren?__blackjack__ hat geschrieben: ↑Samstag 27. April 2019, 00:38 Falls es auf die Reihenfolge ankommt, würde ich `itertools.chain()` und `more_itertools.unique_everseen()` kombinieren:Code: Alles auswählen
In [15]: a Out[15]: [1, 2, 3] In [16]: b Out[16]: [2, 4, 5] In [17]: list(unique_everseen(chain(a, b))) Out[17]: [1, 2, 3, 4, 5]
- __blackjack__
- User
- Beiträge: 13107
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Und `more_itertools`. Ist zwar extern, aber sehr nützlich. Da sind die ”Rezepte” aus der `itertools`-Dokumentation und noch ein bisschen mehr drin.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 5
- Registriert: Freitag 26. April 2019, 03:00
Ja das mit den Itertools scheint mir viel einfacher zu sein, als das was ich da habe. danke dir werde ich mir auf jedenfall mal etwas reinziehen die itertools...
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Hier ist der Quellcode: https://more-itertools.readthedocs.io/e ... e_everseen
Etwas vereinfacht, um die Funktionalität zu verstehen.
seen ist ein set und ein set enthält jedes Element nur einmal. Der Test ob ein Element im Set vorhanden ist, ist sehr perfomant.
In der Funktion wird über die listen iteriert und jedes mal wird nachgesehen, ob das Element in seen ist.
Bei sehr großen Listen, muss man aber bedenken, dass alle vorgekommen Elemente sich im Speicher befinden.
Etwas vereinfacht, um die Funktionalität zu verstehen.
Code: Alles auswählen
def unique_chain(*lists):
seen = set()
iterator = itertools.chain.from_iterable(lists)
for value in iterator:
if value not in seen:
yield value
seen.add(value)
In der Funktion wird über die listen iteriert und jedes mal wird nachgesehen, ob das Element in seen ist.
Bei sehr großen Listen, muss man aber bedenken, dass alle vorgekommen Elemente sich im Speicher befinden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
@UppzEinPing: sollen denn auch alle doppelten Einträge in der ersten oder zweiten Liste entfernt werden? Oder tritt dieser Fall gar nicht auf, weil sichergestellt ist, dass die erste und zweite Liste nur eindeutige Einträge enthalten?
Und die Frage, ob die Reihenfolge wichtig ist, hast Du auch noch nicht beantwortet. Falls nein, nimm Sets, wie __deets__ schon geschrieben hatte.
Und die Frage, ob die Reihenfolge wichtig ist, hast Du auch noch nicht beantwortet. Falls nein, nimm Sets, wie __deets__ schon geschrieben hatte.