是否有可能使用理解产生以下内容,我尝试了同时获取值a,b等...但我知道的唯一方法是通过索引编写,当我这样做时,我得到字符串索引超出范围。
path = ['a', 'b', 'c', 'd', 'e']
-
a, b
b, c
c, d
d, e
答案 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()
同时遍历原始列表和高级列表。