使用理解获得两个值

时间:2013-05-25 11:30:57

标签: python list-comprehension

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

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

-

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

itertools pairwise recipe适用于任何可迭代的

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')]

答案 2 :(得分:3)

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

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

我们在值上生成一个迭代器,将其前进一个,这样我们从第二个值开始,然后使用zip()同时遍历原始列表和高级列表。