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.
Antworten
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

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

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]#!/usr/bin/env python
import this[/code]
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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

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

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

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]#!/usr/bin/env python
import this[/code]
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

ihr seid super, thx a lot ;)
Antworten