Örvitinn

zip() og zip(*) í python

Segjum sem svo að við höfum tvo lista sem innihalda tengda hluti í sömu röð, t.d. einn lista af nöfnum og annan af kennitölum þar sem báðir listar eru raðaðir eftir kennitölum. Hvernig röðum við þeim báðum útfrá gildum í öðrum?

Það getur verið hentugt að sameina tvo lista með zip fallinu í python.

zip(['c','d','a'],[1,2,3]) verður [('c',1),('d',2),('a',3)], semsagt listi af pörum úr báðum listunum.

Getum þvínæst raðað þessum lista með sort en hvað svo? Jú, með zip(*) getum við tekið listana aftur í sundur.

a = ['c','d','a']
b = [1,2,3]
t = zip(a,b)
t.sort()
a,b = zip(*t)
a -> ['a','c','d']
b -> [3,1,2]

og þá erum við búin að raða seinni listanum eftir þeim fyrri.

Stanslaust stuð.

python
Athugasemdir

Eggert - 03/04/09 16:42 #

Mig grunar þú sért að setja inn greinar eins og þessa og þessa til þess að plata fólk inn á síðuna þína til að lesa um Python.

Matti - 03/04/09 16:47 #

Uss. Guido sagði að það væri annað hvort heimsyfirráð eða dauði.

Gummi Jóh - 03/04/09 20:49 #

á zip fallið eitthvað skylt með pkunzip.exe?

Matti - 03/04/09 20:53 #

Nákvæmlega ekki neitt :-)

Nonni - 04/04/09 23:03 #

zip heitir zip því það rennir saman tveimur listum, virkar eins og rennilás.

Hefurðu verið að nota itertools líka, Matti?

Matti - 05/04/09 11:21 #

Örlítið. Reyndi að nota itertools.chain um daginn en það virkaði ekki eins og ég hélt það ætti að virka.

Elías - 11/04/09 11:52 #

Ég nota bara join(1) í /bin/sh :-)