Python使用lambda一次从列表中获取N个元素

时间:2011-07-18 00:12:04

标签: python list lambda

想象一下,我有一个这样的列表:

a = [1,2,3,4,5,6]

使用lambda函数,我想一次返回两个元素,结果将是:

res = [[1,2], [2,3], [3,4], [4,5], [5,6]]

有什么建议吗?

5 个答案:

答案 0 :(得分:7)

>>> zip(a, a[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

对于任意n

>>> n = 3
>>> zip(*(a[i:] for i in range(n)))
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

答案 1 :(得分:3)

>>> import itertools
>>> itertools.izip(a, itertools.islice(a,1,None))

这可以避免创建原始列表的副本,如果它非常大,则可能是相关的。

答案 2 :(得分:2)

>>> map(lambda i:a[i:i+2], range(len(a)-1))
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]

答案 3 :(得分:0)

我建议使用发电机。

>>> a = [1,2,3,4,5,6]
>>>  g=([a[i:i+2]] for i in range(len(a)-1))

如果您愿意,可以随时获取列表:

>>> list(g)
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]

答案 4 :(得分:0)

一个选项:

a = [1, 2, 3, 4, 5, 6]
[a[i:i+2] for i in range(len(a)-1)] # => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]