unpacking vars from list of tuples

Tim Chase python.list at tim.thechases.com
Tue Sep 15 18:33:53 EDT 2009


> If I have a list of tuples:
> 
>    k=[("a", "bob", "c"), ("p", "joe", "d"), ("x", "mary", "z")]
> 
> and I want to pull the middle element out of each tuple to make a new
> list:
> 
> myList = ["bob", "joe", "mary"]
> 
> is there some compact way to do that?  I can imagine the obvious one
> of
> 
> myList = []
> for a in k:
>    myList.append(a[1])
> 
> But I'm guessing Python has something that will do that in one line...

To add some readability to the other suggested solutions, I'd use
tuple unpacking

  my_list = [name for status, name, code in k]

Not knowing what [0] and [2] are, I randomly designated them as 
"status" and "code", but you likely have your own meanings.  If 
you don't, you can always just use the "_" convention:

   my_list = [name for _, name, _ in k]
   # or
   my_list = [name for (_, name, _) in k]

As an aside, "my_list" is preferred over "myList" in common 
Python practice.  I don't know if there's a preferred convention 
for "with vs without" the parens in such a tuple-unpacking list 
comprehension.

-tkc










More information about the Python-list mailing list