2

可能重复:
在 Python 中将列表迭代为对(当前,下一个)

我有一个这样的列表:

list = [A, B, C, D, E, F, G]

如何将其分组以获得以下 Python 输出

[(A,B), (B,C), (C, D), (D,E), (E,F), (F,G)]

所以这些值按第二个值分组,但顺序被保留......

4

3 回答 3

5

尝试使用zip()

zip(lst, lst[1:])

此外,您不应使用 name list,因为您将覆盖内置列表类型。

例子:

>>> lst = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
>>> zip(lst, lst[1:])
[('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F'), ('F', 'G')]

对于可以与生成器或其他一次性迭代器一起使用的版本,您可以使用itertools 文档中的成对配方

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)
于 2012-10-31T21:45:45.237 回答
3
>>> a = [1,2,3,4,5]
>>> zip(a, a[1:])
<zip object at 0x7fe6e905ab90>
>>> list(zip(a, a[1:]))
[(1, 2), (2, 3), (3, 4), (4, 5)]
于 2012-10-31T21:45:40.010 回答
1

使用从 0 迭代到 length - 1 的列表推导

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

甚至更好,只需使用 zip

print zip (a,a[1:])
于 2012-10-31T21:44:39.580 回答