Simple Tupel Frage...

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
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Hallo,

also ich bin Anfänger in Python und habe jetzt ein Tupel aus einer Datenbank zurückerhalten...

wenn ich jetzt den "result" ganz einfach "print"e dann bekomme ich sowas:
(('fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk',), ('tzkjuzlirfgnhjtzkjrthr',))
Wien nennt man sowas? Ein 2-dimensionales Tupel?

nun habe ich versucht die einzelnen Werte so abzurufen:

Code: Alles auswählen

x = ()
for i in result:
	c = result[i]
	x.extend(c)
for n in x:
	print x[n]
Nur leider geht das nicht und zweitens ist es nicht besonders schön...

Kann man nicht irgendwie direkt auf die einzelnen Werte zugreifen? Oder wo ist mein Fehler?

Danke!
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

sehe gerade, dass ich einen logischen Fehler drin hatte...
und man tuples nicht extenden kann...

neuer Code...:

Code: Alles auswählen

x = []
for i in result:
	x.extend(i)
for n in x:
	print n
Nur, es besteht die Frage, ob das nicht noch einfacher geht?
Zuletzt geändert von nemomuk am Freitag 9. November 2007, 19:49, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du hast einfach mehrere Tupel in einem Tupel verschachtelt.

Zugreifen darauf kannst du so:

Code: Alles auswählen

for one in result:
    for two in one:
        print two
SchneiderWeisse hat geschrieben:sehe gerade, dass ich einen logischen Fehler drin hatte...
und man tuples nicht extenden kann...
Ja, Tupeln sind immutable. Das heißt aber nicht, dass man auf deren Werte nicht zugreifen könnte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke!

Ich sehe, man muss in Python etwas anders denken, aber man kann es sehr schön lösen!
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Das ist ein tuple, das zwei tuples enthält, die jeweils einen string enthalten.

Also:

Code: Alles auswählen

>>> x=(('fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk',), ('tzkjuzlirfgnhjtzkjrthr',))
>>> for e in x: print e[0]
fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk
tzkjuzlirfgnhjtzkjrthr
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke für die Andworten!

eine Frage noch:
angenommen ich habe zwei results die als Tupel zurückgeliefert werden:

Code: Alles auswählen

result1 = ((1,),(2,),(3,))
result2 = (("user1",),("user2",),("user3",))
und ich möchte dass nach jedem Wert von result1 einer von result2 folgt...
(jetzt mal abgesehen von der "Qualität der Datenbankstruktur")

Danke!
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

:)

Code: Alles auswählen

In [4]: zip(result1, result2)
Out[4]: [((1,), ('user1',)), ((2,), ('user2',)), ((3,), ('user3',))]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und wenn man wirklich ein Tupel hinter dem anderen haben will (d.h. ohne die zusätzlichen Tupel zu denen `zip` die Ergebnisse packt):

Code: Alles auswählen

sum([list(r) for r in zip(result1, result2)], [])
Und nun mit Generatoren :)

Code: Alles auswählen

from itertools import izip
sum((list(r) for r in izip(result1, result2)), [])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke, ich hab jetzt einfach die Methode von Blackvivi verwendet...
und habe noch ein 3. for eingebaut...

Für die, die es interessiert: und die vllt. mal die Forumssuche verwenden sollten ;) :

Code: Alles auswählen

result = zip(result1, result2)
print "Tupel von username und userid in 2 verschiedenen Queries:<br>", result, "<br>"
for one in result:
	for two in one:
		for three in two:
			print three
	print "<br>"
Antworten