1

是否可以使用理解产生以下内容,我尝试获取值 a,b 等。但我知道的唯一方法是通过索引,当我这样做时,字符串索引超出范围。

path = ['a', 'b', 'c', 'd', 'e']

--

a, b
b, c
c, d
d, e
4

3 回答 3

5

你可以zip在这里使用:

>>> lis =  ['a', 'b', 'c', 'd', 'e']
>>> for x,y in zip(lis,lis[1:]):
...     print x,y
...     
a b
b c
c d
d e
于 2013-05-25T11:31:43.123 回答
4

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)

path = ['a', 'b', 'c', 'd', 'e']
>>> for x, y in pairwise(path):
    print x, y


a b
b c
c d
d e
>>> list(pairwise(path))
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e')]
于 2013-05-25T11:33:51.757 回答
3

实现这一点的最佳方法不是通过列表理解,而是zip()

advanced = iter(path)
next(advanced, None)
for item, next_item in zip(path, advanced):
    ...

我们对这些值生成一个迭代器,将其推进一个,因此我们从第二个值开始,然后使用 . 同时遍历原始列表和高级列表zip()

于 2013-05-25T11:32:13.500 回答