Python元组解包

Rap*_*phi 11 python list-comprehension iterable-unpacking

如果我有

 nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
Run Code Online (Sandbox Code Playgroud)

并希望

nums = [1, 2, 3]
words= ['one', 'two', 'three']
Run Code Online (Sandbox Code Playgroud)

我怎么用Pythonic方式做到这一点?我花了一分钟才意识到为什么以下不起作用

nums, words = [(el[0], el[1]) for el in nums_and_words]
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有人可以提供类似的方式来实现我正在寻找的结果.

tob*_*s_k 15

使用zip,然后解压缩:

nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
nums, words = zip(*nums_and_words)
Run Code Online (Sandbox Code Playgroud)

实际上,这两次"解包":首先,当您将列表列表传递给zipwith时*,然后将结果分发给两个变量.

您可以将其zip(*list_of_lists)视为"转置"参数:

   zip(*[(1, 'one'), (2, 'two'), (3, 'three')])
== zip(  (1, 'one'), (2, 'two'), (3, 'three') )
== [(1, 2, 3), ('one', 'two', 'three')]
Run Code Online (Sandbox Code Playgroud)

请注意,这将为您提供元组; 如果你真的需要清单,你必须得到map结果:

nums, words = map(list, zip(*nums_and_words))
Run Code Online (Sandbox Code Playgroud)