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:

Code: Alles auswählen

eval("variable = \"Wert\"")

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 ;)