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)