beliebig viele Listen erstellen lassen!?

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
Fantacoca
User
Beiträge: 23
Registriert: Donnerstag 15. Oktober 2009, 14:53
Kontaktdaten:

hallo leute, ich hab eine frage, und zwar möchte ich, dass der benutzer gefragt wird wieviele listen erstellt werden sollen, und der pc (python) dann diese erstellt also frei nach dem beispiel. am ende sollte auf alle listen zugegriffen werden, ohne dass man noch listen erstellen muss. meine einzigste idee zu dem thema wäre unendlich viele listen erstellen und hoffen dass der benutzer nicht noch mehr möchte ;)

eigentlich wollt ich das problem selber lösen, aber vlt könnt ihr mir ja einen tipp geben, nicht gleich komplett lösen, ich wollte selbst drauf kommen :( die "help(list)" funktion von python hat mir leider auch nicht weitergeholfen :(

mfg Fantacoca
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo!

Erst willst du den Benutzer eingeben lassen, wie viele Listen erstellt werden sollen, aber dann soll er auf mehr zugreifen können? Deine Frage verstehe ich irgendwie nicht so recht.

Erzähle uns lieber was das eigentliche Problem ist, dann können wir dir bestimmt mit einer vernünftigen Lösung helfen.
Das Leben ist wie ein Tennisball.
Fantacoca
User
Beiträge: 23
Registriert: Donnerstag 15. Oktober 2009, 14:53
Kontaktdaten:

ich wollte nur nicht dass ihr mir die "hausaufgaben" lösen müsst >.<

also:

ich soll ein programm zur einfachen matrixberechnung schreiben (matrix transponieren, etc)

dazu nutzt man Listen in einer Liste:

die erste Liste ist die Spalten Anzahl, und pro listenargument kommt eine neue liste, die dann stellvertetend fr die Zeilenanzahl ist.

der User gibt nun eine Zahl n und m ein. n steht für die spaltenanzahl, und m steht für die Zeilenanzahl.

also hab ich schonmal die erste Liste:

spalten(zeilen1, zeilen2, ..... , zeilenN)

und zeilen 1 bis n müssen natürlich erzeugt werden. die kann man ja nicht vorher in den speicher einlesen lassen, und dass ist mein problem, dass der user sagt "ich will eine matrix mit 5 spalten und 3 zeilen) also müssen fünf neue listen erzeugt werden, die jeweils 3 argumente lang sind.

ich hoffe ich erzähl nicht zuviel in rätseln.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wie wäre es mit ``list.append``?

Was du meinst ist das, oder?

Code: Alles auswählen

[[list() for _ in range(m)] for _ in range(n)]
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Fantacoca
User
Beiträge: 23
Registriert: Donnerstag 15. Oktober 2009, 14:53
Kontaktdaten:

@jbs:
dass ist das was ich suche, aber der code macht mir irgendwie angst o.O ich versteh den nicht, ich bin jemand der wissen will wie etwas geht, und nicht nur dass es geht, kannst du mir evtl erklären wass deine eine zeile code da alles so anrichtet? bzw hast du abkürzungen benutzt?

beim sufu nutzen bin ich auch auf etwas interessantes gestoßen

Code: Alles auswählen

for i in range(5):
	exec 'list%s = []' %i

	
>>> list0
[]
>>> list1
[]
>>> list2
[]
>>> list3
[]
>>> list4
[]
nur hab ich bei dem zeug das gleiche problem wie bei dem von jbs, ich hab keinen plan was das da tut, und warum es geht, und was exec ist und hilfe un ich dreh durch *waaaaah* ^^
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Vielleicht kennst du keine list-comprehensions?
Weniger elegant, aber vielleicht für dich verständlicher:

Code: Alles auswählen

>>> zeilenzahl, spaltenzahl = 3, 5
>>> zeile = [0]*spaltenzahl
>>> matrix = []
>>> for k in xrange(zeilenzahl):
...     matrix.append(zeile[:])
... 
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
Wichtig ist, dass du KOPIEN der Zeilen anfügst, sonst besteht deine Matrix am Ende zwar aus 3 Zeilen, die aber alle Referenzen auf die gleiche Liste sind. Änderst du dann EINEN Wert der Matrix, änderst du immer gleich drei Werte auf einmal ...
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Der Einzeiler ist etwa ähnlich wie das:

Code: Alles auswählen

matrix = []

for _ in range(m):
    l = []
    for _ in range(n):
        l.append([])
   matrix.append(l)
Schau dir mal den Artikel über List-Comprehenshions an.

Exec führt einen String aus, als sei er python-Code. Ganz eklig sowas.


Edit: Verdammt, zu spät.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Fantacoca hat geschrieben:ich versteh den nicht, ich bin jemand der wissen will wie etwas geht, und nicht nur dass es geht,
Da dürfte die Python Dokumentation genau das richtige für dich sein:
<> The ``exec`` statement
<> list comprehension

Grüße
Gerrit
BlackJack

@Fantacoca: Du musst die Matrix doch gar nicht am Anfang erstellen, wenn der Benutzer die Zeilen später eingeben muss. Da kann man doch genau so gut jede Zeilen *nachdem* sie eingegeben wurde an die Matrix anhängen.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Fantacoca hat geschrieben: beim sufu nutzen bin ich auch auf etwas interessantes gestoßen

Code: Alles auswählen

for i in range(5):
	exec 'list%s = []' %i
Interessant vielleicht, aber auch böse.

Vergiss einfach was du da gesehen hast. Das ist einfach eine unsaubere Methode um ein Problem zu lösen das man nicht hätte wenn man es gleich richtig machen würde.
Antworten