Seite 1 von 1
Listen umwandeln
Verfasst: Samstag 19. November 2022, 22:03
von pythonnoob12345
Ich habe versucht, ein Programm zu schreiben, welches aus einer Liste wie folgender
liste = ['a','b','c','d']
in eine solche umwandelt:
neue_liste = ['a:b','a:c','a:d','b:c','b:d','c:d']
Also dass jedes Element einmal mit jedem anderen gepaart wird.
Ich habe es mit folgendem versucht, bin allerdings gescheitert.
Code: Alles auswählen
liste = ['a','b','c','d']
neue_liste = []
n = 0
m = 0
while n <= len(liste)-1:
m=n+1
while m <= len(liste):
element = str(liste[n]) + ':' + str(liste[m])
neue_liste.append(element)
m=+1
n=+1
print(neue_liste)
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 00:05
von Kebap
Warum willst du das machen? Was hast du dann mit den Paaren vor?
Code: Alles auswählen
>>> liste = ["a", "b", "c"]
>>> neue_liste = [f"{x}:{y}" for x in liste for y in liste]
>>> neue_liste
['a:a', 'a:b', 'a:c', 'b:a', 'b:b', 'b:c', 'c:a', 'c:b', 'c:c']
>>>
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 00:06
von bi3mw
Hi,
folgender Code gibt aus was Du möchtest:
Code: Alles auswählen
#!/usr/bin/env python
# -*-coding: utf-8-*-
liste = ['a', 'b', 'c', 'd']
def tessa(source):
result = []
for p1 in range(len(source)):
for p2 in range(p1+1, len(source)):
result.append([source[p1], source[p2]])
return result
pairings = tessa(liste)
print("%d pairings" % len(pairings))
for pair in pairings:
print(pair)
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 00:21
von Kebap
Eigentlich will man die einzelnen Paare nicht in einem String haben, sondern wieder in einer (Unter-)Liste oder einem Tuple, z.B. so:
Code: Alles auswählen
>>> from itertools import combinations
>>> list(combinations("abcd", r=2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
>>>
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 11:31
von Sirius3
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Die äußere Schleife geht bis Länge-1, die innere dagegen näbis zur Länge der Liste, und damit als Index über das Ende der Liste hinaus. Besser mit < vergleichen.
Die Elemente der Liste sind bereits Strings, die nochmals per str umzuwandeln also überflüssig.
Den Schleifenindex muss nun hochzählen, statt ihn nur auf 1 zu setzen, denn so wird die Schleife niemals beendet.
Das m = 0 wird nirgends benutzt.
Code: Alles auswählen
liste = ['a','b','c','d']
neue_liste = []
n = 0
while n < len(liste):
m = n+1
while m < len(liste):
element = f"{liste[n]}:{liste[m]}"
neue_liste.append(element)
m += 1
n += 1
print(neue_liste)
Statt der while-Schleifen sind for-Schleifen hier aber viel klarer.
Code: Alles auswählen
for n in range(len(liste)):
for m in range(n + 1, len(liste)):
element = f"{liste[n]}:{liste[m]}"
neue_liste.append(element)
print(neue_liste)
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 14:42
von pythonnoob12345
Danke für die Antwort!
Re: Listen umwandeln
Verfasst: Sonntag 20. November 2022, 15:45
von bb1898
Ich wundere mich, dass diesmal niemand darauf hinweist, dass man über Listen direkt iterieren kann. Ganz ohne Index geht es hier zwar nicht, aber zum Beispiel so:
Code: Alles auswählen
liste = "abcd" # Zum Einlesen genau so gut wie Liste.
neue_liste = [] # Das Ergebnis soll aber eine Liste sein, keine Zeichenkette.
for (n, x) in enumerate(liste):
for y in liste[n + 1:]:
element = f"{x}:{y}"
neue_liste.append(element)
print(neue_liste)
Re: Listen umwandeln
Verfasst: Montag 21. November 2022, 00:05
von Kebap
bb1898 hat geschrieben: Sonntag 20. November 2022, 15:45
Ganz ohne Index geht es hier zwar nicht
Eigentlich hatte ich Möglichkeiten gezeigt..
Code: Alles auswählen
>>> from itertools import combinations
>>> [f"{x}:{y}" for x, y in combinations("abcd", r=2)]
['a:b', 'a:c', 'a:d', 'b:c', 'b:d', 'c:d']
>>>
Hätte aber gerne Antworten auf meine Rückfragen gehabt, weil das hier stark nach einem x/y-Problem riecht.