Sortierfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

Sortierfrage

Beitragvon Ravenlord » Donnerstag 11. November 2004, 18:03

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 11. November 2004, 18:18

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

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 11. November 2004, 18:54

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
TUFKAB – the user formerly known as blackbird
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

Beitragvon Ravenlord » Donnerstag 11. November 2004, 19:11

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
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 11. November 2004, 20:09

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\"")
TUFKAB – the user formerly known as blackbird
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 11. November 2004, 20:14

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

Code: Alles auswählen

#!/usr/bin/env python
import this
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

Beitragvon Ravenlord » Donnerstag 11. November 2004, 20:19

ihr seid super, thx a lot ;)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], jan.b