想象一下,我有一个这样的名单:
a = [1,2,3,4,5,6]
使用lambda函数,我想在同一时间返回两个元素,所以其结果必然是:
res = [[1,2], [2,3], [3,4], [4,5], [5,6]]
有什么建议么?
想象一下,我有一个这样的名单:
a = [1,2,3,4,5,6]
使用lambda函数,我想在同一时间返回两个元素,所以其结果必然是:
res = [[1,2], [2,3], [3,4], [4,5], [5,6]]
有什么建议么?
>>> import itertools
>>> itertools.izip(a, itertools.islice(a,1,None))
这样就避免了创建原始列表的副本,这可能是相关的,如果这是非常大的。
>>> 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)]
>>> map(lambda i:a[i:i+2], range(len(a)-1))
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
一个选项:
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]]
我建议使用一台发电机。
>>> 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]]