Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

list comprehension - Python Tuple Unpacking

If I have

 nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]

and would like

nums = [1, 2, 3]
words= ['one', 'two', 'three']

How would I do that in a Pythonic way? It took me a minute to realize why the following doesn't work

nums, words = [(el[0], el[1]) for el in nums_and_words]

I'm curious if someone can provide a similar manner of achieving the result I'm looking for.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use zip, then unpack:

nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
nums, words = zip(*nums_and_words)

Actually, this "unpacks" twice: First, when you pass the list of lists to zip with *, then when you distribute the result to the two variables.

You can think of zip(*list_of_lists) as 'transposing' the argument:

   zip(*[(1, 'one'), (2, 'two'), (3, 'three')])
== zip(  (1, 'one'), (2, 'two'), (3, 'three') )
== [(1, 2, 3), ('one', 'two', 'three')]

Note that this will give you tuples; if you really need lists, you'd have to map the result:

nums, words = map(list, zip(*nums_and_words))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...