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 !!