Tuple Problem

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
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo,

ich möchte eine Datenreihe einlesen.

z.B.: 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7

und möchte diese in einem Tuple von Tupeln speichern, Howto ?

Tuple=((1,2,3,4),(5,6,7,8),(9,1,2,3),(4,5,6,7))

ich bekomme immer nur eine Liste oder ein Tuple hin.

r/Delle
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Mit einer einfachen Schleife. Slicing, List Comprehensions und die zip-Funktion können aber auch sehr hilfreich sein.
Das Leben ist wie ein Tennisball.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du

Code: Alles auswählen

>>> a=1,2,3,4,5,6,7,8,9
>>> a
(1, 2, 3, 4, 5, 6, 7, 8, 9)
definierst, dann ist a automatisch ein Tuple.

Jetzt kannst du das entweder händisch Teilen

Code: Alles auswählen

>>> b=(a[0:3],a[3:6],a[6:9])
>>> b
((1, 2, 3), (4, 5, 6), (7, 8, 9))
oder, was geschickter ist, direkt beim Einlesen. Dann kommt es aber drauf an, wie und von wo die einliest...

Gruß, noisefloor
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Mal auf die Schnelle was zusammengehackt:

Code: Alles auswählen

def take(a,n):
    return tuple(a[:n])

def drop(a,n):
    return tuple(a[n:])

def group(a,n):
    if a:
        return [take(a,n)] + group(drop(a,n),n)
    else:
        return []

l = [1,2,3,4,5,6,7,8,9,10,11]

print tuple(group(l,4))
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

oder ohne (böse ;-) ) Rekursion:

Code: Alles auswählen

>>> a=1,2,3,4,5,6,7,8,9
>>> b =[]
>>> for x in range(0,len(a),3):
           b.append(a[x:x+3])
>>> b
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
Gruß, noisefloor
BlackJack

Und nochmal als "list comprehension":

Code: Alles auswählen

In [34]: a = tuple(xrange(1,10))

In [35]: b = [a[x:x + 3] for x in xrange(0, len(a), 3)]

In [36]: b
Out[36]: [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und natürlich noch die offensichtliche Lösung (mit einer leichten Schwäche bei leeren Listen):

Code: Alles auswählen

>>> ls = range(10)
>>> map(tuple, reduce(lambda x, y: x[:-1]+([x[-1]+[y]] if len(x[-1]) != 3 else [x[-1], [y]]), ls, [[]]))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
Das Leben ist wie ein Tennisball.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

EyDu hat geschrieben:Und natürlich noch die offensichtliche Lösung
Gaaanz offensichtlich. ;)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Mit NumPy:

Code: Alles auswählen

In [33]: arange(21).reshape(7,3)
Out[33]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20]])
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Danke !!
Antworten