map(函数,序列),其中函数返回两个值

时间:2011-08-10 17:42:59

标签: python

查看以下Python代码:

def function(x):
    return x, x+1

sequence = range(5)

map(function, sequence)

返回

[(0,1), (1,2), (2,3), (3,4), (4,5)]

我想获得输出

[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]

这意味着,我希望将函数的两个输出分成两个不同的列表。我可以在没有遍历列表的情况下实现这一目标吗?

在实际代码中,我不会有整数列表,而是类实例。所以我可能会遇到一些复制/深度复制问题,我想避免这些问题。

3 个答案:

答案 0 :(得分:8)

希望这会有所帮助:

>>> a = [(0,1), (1,2), (2,3), (3,4), (4,5)]
>>> zip(*a)
[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5)]

http://docs.python.org/library/functions.html#zip

答案 1 :(得分:3)

>>> a = zip(*map(function, sequence))
>>> for i in a: print(i)
...
(0, 1, 2, 3, 4)
(1, 2, 3, 4, 5)

答案 2 :(得分:1)

另一种方法是:

>>> seq = range(5+1)
>>> a = [seq[:-1], seq[1:]]
>>> a
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]]