zip list with different length

ginstrom ginstrom at tree.odn.ne.jp
Wed Apr 4 04:20:37 EDT 2007


On Apr 4, 4:53 pm, s99999999s2... at yahoo.com wrote:
> elements, say len(a) = 5, len(b) = 3
> >>> a = range(5)
> >>> b = range(3)
...
> I want the results to be
> [(0, 0), (1, 1), (2, 2) , (3) , (4) ]
> can it be done?

A bit cumbersome, but at least shows it's possible:

>>> def superZip( a, b ):
	common = min( len(a), len(b) )
	results = zip( a[:common], b[:common] )
	if len( a ) < len( b ):
		a = b
	return results + [ (x,) for x in a[common:] ]

>>> superZip( range( 5 ), range( 3 ) )
[(0, 0), (1, 1), (2, 2), (3,), (4,)]
>>> superZip( range( 3 ), range( 5 ) )
[(0, 0), (1, 1), (2, 2), (3,), (4,)]
>>> superZip( range( 0 ), range( 5 ) )
[(0,), (1,), (2,), (3,), (4,)]
>>> superZip( range( 3 ), range( 3 ) )
[(0, 0), (1, 1), (2, 2)]

Regards,
Ryan Ginstrom




More information about the Python-list mailing list