Seite 1 von 1

Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 08:12
von delle
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

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 08:19
von EyDu
Hallo.

Mit einer einfachen Schleife. Slicing, List Comprehensions und die zip-Funktion können aber auch sehr hilfreich sein.

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 08:25
von noisefloor
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

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 08:37
von hendrikS
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))

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 09:20
von noisefloor
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

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 09:55
von 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)]

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 10:21
von EyDu
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,)]

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 10:41
von mkesper
EyDu hat geschrieben:Und natürlich noch die offensichtliche Lösung
Gaaanz offensichtlich. ;)

Re: Tuple Problem

Verfasst: Dienstag 6. Juli 2010, 12:38
von gkuhl
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]])

Re: Tuple Problem

Verfasst: Mittwoch 7. Juli 2010, 07:27
von delle
Danke !!