是否可以使用理解产生以下内容,我尝试获取值 a,b 等。但我知道的唯一方法是通过索引,当我这样做时,字符串索引超出范围。
path = ['a', 'b', 'c', 'd', 'e']
--
a, b
b, c
c, d
d, e
是否可以使用理解产生以下内容,我尝试获取值 a,b 等。但我知道的唯一方法是通过索引,当我这样做时,字符串索引超出范围。
path = ['a', 'b', 'c', 'd', 'e']
--
a, b
b, c
c, d
d, e
你可以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
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')]
实现这一点的最佳方法不是通过列表理解,而是zip()
:
advanced = iter(path)
next(advanced, None)
for item, next_item in zip(path, advanced):
...
我们对这些值生成一个迭代器,将其推进一个,因此我们从第二个值开始,然后使用 . 同时遍历原始列表和高级列表zip()
。