如果我有这样的列表:
>>> data = [(1,2),(40,2),(9,80)]
如何提取两个列表[1,40,9]和[2,2,80]?当然我可以自己迭代并提取数字但我猜有更好的方法吗?
解压缩操作是:
In [1]: data = [(1,2),(40,2),(9,80)] In [2]: zip(*data) Out[2]: [(1, 40, 9), (2, 2, 80)]
编辑:您可以在分配时分解结果列表:
In [3]: first_elements, second_elements = zip(*data)
如果你真的需要列表作为结果:
In [4]: first_elements, second_elements = map(list, zip(*data))
为了更好地理解为什么这有效:
zip(*data)
相当于
zip((1,2), (40,2), (9,80))
结果列表中的两个元组是根据zip()参数的第一个元素和zip()参数的第二个元素构建的.
列表理解除了一天:
first = [x for (x,y) in data] second = [y for (x,y) in data]
还有
In [1]: data = [(1,2),(40,2),(9,80)] In [2]: x=map(None, *data) Out[2]: [(1, 40, 9), (2, 2, 80)] In [3]: map(None,*x) Out[3]: [(1, 2), (40, 2), (9, 80)]