Seite 1 von 1
Sortierfrage
Verfasst: Donnerstag 11. November 2004, 18:03
von Ravenlord
Hallo,
ich versuche gerade eine Liste zu sortieren. Problem ist:
Code: Alles auswählen
a = ["a", "k", "ab", "c"]
b = a
b.sort()
print a
['a', 'ab', 'c', 'k']
print b
['a', 'ab', 'c', 'k']
warum ist dann die liste a auch sortiert??? geht das irgendwie das ich das verhinder?
danke schonmal für eure zeit
Alex
Verfasst: Donnerstag 11. November 2004, 18:18
von Dookie
Hi Ravenlord,
mit
b = a weist du b eine Referenz auf die gleiche liste zu, auf die auch a zeigt. Also a und b sind die selbe Liste. Du kannst das verhindern indem du an b eine Kopie von a zuweist.
Code: Alles auswählen
a = ["a", "k", "ab", "c"]
b = a[:] # Kopie von a!
b.sort()
print a
["a", "k", "ab", "c"]
print b
['a', 'ab', 'c', 'k']
Gruß
Dookie
Verfasst: Donnerstag 11. November 2004, 18:54
von mitsuhiko
Die Erklärung für das
[:]:
In Python kann man die Elemente so ansprechen:
Code: Alles auswählen
lst = ["foo", "bar", "foobar"]
print lst[1] #gibt "bar" aus
print lst[1:] #gibt "bar" und "foobar" aus
print lst[:1] #gibt "foo" und "bar" aus
print lst[:] #gibt "foo", "bar" und "foobar" aus
Verfasst: Donnerstag 11. November 2004, 19:11
von Ravenlord
aaahh ok sowas in der art hab ich mir schon gedacht, wusste nur nich genau obs stimmt.
danke für die super schnelle hilfe!
achja nochwas:
will kein neues Thema aufmachen deswegen, aber vll weiß das ja jemand der per zufall hier rein schaut:
ich brauch noch ne Möglichkeit mit der ich ein wort aus der Liste einer Variablen zuweise. problem dabei ist, jedes wort soll eine Variable bekommen, nur ist die anzahl der Wörter unbekannt. Wollte dann so variablen nehmen wie AA AB AC ... wie kann ich sowas bewerkstelligen?
thx
Verfasst: Donnerstag 11. November 2004, 20:09
von mitsuhiko
Das ist einfach.
Du kannst ja mit eval() Code ausführen.
Also müsstest du nur alle Elemente der Liste durchgehen und mit sowas einer Variable zuweisen:
Verfasst: Donnerstag 11. November 2004, 20:14
von Dookie
ich würd da keine extra Variable für jedes Wort nehmen sondern ein Dictionary.
Code: Alles auswählen
def create_name():
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in alphabet:
for j in alphabet:
yield i+j
wortliste = ["alpha", "beta", "gamma", "delta"]
wortdict = dict(zip(create_name(), wortliste))
print wortdict[/python]
create_name ist dabei ein Generator, der "AA", "AB", "AC" .. "ZZ" zurückliefert.
Damit kannst Du 676 Worte worddict speichern und dann mit wortdict["AA"], wortdict["AB"], wortdict["AC"] ... ansprechen.
Gruß
Dookie
Verfasst: Donnerstag 11. November 2004, 20:19
von Ravenlord
ihr seid super, thx a lot