获取列表Python对

2024-04-25 22:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

c = [1,2,3,4,5,6,7,8,9,10]

for a,b in func(c):
    doSomething()

所以func()必须返回(1,2) (2,3) (3,4) ... (8,9) (9,10)

Python2.7中是否有一种优雅的方法来实现这一点?在


Tags: 方法inforfuncdosomething
3条回答

有很多方法

>>> a = [1,2,3,4,5,6,7,8,9,10]
>>> list(zip(a,a[1:]))
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]

其他的方法是

  • [(a[i],a[i+1]) for i in range(len(a)-1)]

当你想要一个功能你可以做

^{pr2}$

当然,有很多方法。最简单:

def func(alist):
    return zip(alist, alist[1:])

这在Python2中花费了大量内存,因为zip生成了一个实际的列表,切片也是如此。有几种方法专注于提供内存节省的生成器,例如非常简单的:

^{pr2}$

或者,你也可以让你的爱好者部署强大的itertools,就像@HughBothwell提出的pairwise方法一样。

itertools documentation有一个解决方法:

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

那么

^{pr2}$

相关问题 更多 >