[Tutor] Looking for a Pythonic way to pass variable
Bill Mill
bill.mill at gmail.com
Tue Mar 22 21:27:02 CET 2005
On Tue, 22 Mar 2005 13:30:09 -0500, Kent Johnson <kent37 at tds.net> wrote:
> C Smith wrote:
> >
> > On Tuesday, Mar 22, 2005, at 05:01 America/Chicago,
> > tutor-request at python.org wrote:
> >
> >> I met a similar question.
> >> what if one has L = [[1,2],[3,4]], K = [100, 200]
> >> How to 'zip' a List like [[1,2,100], [3,4,200]]?
> >>
> > I would do something like:
> >
> > ###
> > for i in range(len(L)):
> > L[i].append(K[i])
> > ###
>
> Oh, the light goes on :-) Thanks C Smith!
>
> Here is another way:
> >>> L = [[1,2],[3,4]]
> >>> K = [100, 200]
> >>> [ x+[y] for x, y in zip(L, K) ]
> [[1, 2, 100], [3, 4, 200]]
>
> Note C Smith's approach modifies L to include the items in K; my approach makes a new list.
Just for kicks - if you don't mind if the 100 and 200 appear first
instead of last, and conversion of your inner lists to tuples, then:
>>> L = [[1,2], [3,4]]
>>> K = [100, 200]
>>> zip(K, *L)
[(100, 1, 3), (200, 2, 4)]
works, and looks a little nicer. Also, to modify the list in-place
with a listcomp, you could use:
>>> L = [[1,2], [3,4]]
>>> K = [100, 200]
>>> [x.append(y) for x, y in zip(L, K)]
[None, None]
>>> L
[[1, 2, 100], [3, 4, 200]]
And, to create a new list in the format you originally asked for, we
can modify the first trick I showed you:
>>> L = [[1,2], [3,4]]
>>> K = [100, 200]
>>> [[b,c,a] for a,b,c in zip(K, *L)]
[[1, 3, 100], [2, 4, 200]]
which I think is pretty cool, if a little obtuse.
Peace
Bill Mill
bill.mill at gmail.com
More information about the Tutor
mailing list