Python 元组拆包
Python Tuple Unpacking
如果我有
nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
并且想要
nums = [1, 2, 3]
words= ['one', 'two', 'three']
我将如何以 Pythonic 的方式做到这一点?我花了一分钟才意识到为什么以下内容不起作用
nums, words = [(el[0], el[1]) for el in nums_and_words]
我很好奇是否有人可以提供类似的方式来实现我正在寻找的结果。
只需解压缩并创建列表:
nums = list(zip(*nums_and_words)[0])
word = list(zip(*nums_and_words)[1])
请参阅 zip
文档。
使用zip
,然后解压:
nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
nums, words = zip(*nums_and_words)
实际上,这个"unpacks"两次:首先,当您将列表的列表传递给zip
和*
时,然后当您将结果分配给两个变量时。
您可以将 zip(*list_of_lists)
视为 'transposing' 参数:
zip(*[(1, 'one'), (2, 'two'), (3, 'three')])
== zip( (1, 'one'), (2, 'two'), (3, 'three') )
== [(1, 2, 3), ('one', 'two', 'three')]
请注意,这将为您提供元组;如果你真的需要列表,你必须 map
结果:
nums, words = map(list, zip(*nums_and_words))
使用列表理解..
nums = [nums_and_words[x][0] for x in xrange(len(nums_and_words)) ]
words = [nums_and_words[x][1] for x in xrange(len(nums_and_words)) ]
测试这是否有效
print nums ,'&', words
如果我有
nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
并且想要
nums = [1, 2, 3]
words= ['one', 'two', 'three']
我将如何以 Pythonic 的方式做到这一点?我花了一分钟才意识到为什么以下内容不起作用
nums, words = [(el[0], el[1]) for el in nums_and_words]
我很好奇是否有人可以提供类似的方式来实现我正在寻找的结果。
只需解压缩并创建列表:
nums = list(zip(*nums_and_words)[0])
word = list(zip(*nums_and_words)[1])
请参阅 zip
文档。
使用zip
,然后解压:
nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
nums, words = zip(*nums_and_words)
实际上,这个"unpacks"两次:首先,当您将列表的列表传递给zip
和*
时,然后当您将结果分配给两个变量时。
您可以将 zip(*list_of_lists)
视为 'transposing' 参数:
zip(*[(1, 'one'), (2, 'two'), (3, 'three')])
== zip( (1, 'one'), (2, 'two'), (3, 'three') )
== [(1, 2, 3), ('one', 'two', 'three')]
请注意,这将为您提供元组;如果你真的需要列表,你必须 map
结果:
nums, words = map(list, zip(*nums_and_words))
使用列表理解..
nums = [nums_and_words[x][0] for x in xrange(len(nums_and_words)) ]
words = [nums_and_words[x][1] for x in xrange(len(nums_and_words)) ]
测试这是否有效
print nums ,'&', words