在可迭代中获取一个元素和以下元素的优雅/高效方法

Elegant / Efficient way of getting one element and the following in an iterable

所以我有一个问题,我有一个像 string = "ABCDEFG" 这样的可迭代对象(这里是字符串或列表),我想输出类似

的东西
A-B
B-C
C-D
...
F-G

所以我知道这行得通(忘记处理 indexError,但无论如何)但它非常难看...

for i in range(len(myString)):
    element1 = myString[i]
    element2 = myString[i+1]
    print("theshit")

有没有一种更 elegant/pythonic 的方式来做到这一点?我认为 itertools 可以是一个解决方案,但我不知道它是如何工作的..

顺便说一下,我只需要 myString 这个循环,所以可能需要生成器(我也不知道如何使用它,我还在学习)

谢谢:)

itertools.izip 如果你用序列的尾部压缩你的序列(你可以使用 itertools.islice):

>>> from itertools import islice, izip
>>> iterable = "abcdefg"
>>> for x in izip(iterable, islice(iterable, 1, None)): print x
...
('a', 'b')
('b', 'c')
('c', 'd')
('d', 'e')
('e', 'f')
('f', 'g')

这是一个选项,但 Frenrich 的答案绝对是最好的。

我之所以提到它,是因为它在类似情况下可能会有帮助

sequence = 'ABCDEFG'
iter_1 = iter(sequence)
iter_2 = iter(sequence)

next(iter_2) # throw away the first value

for a, b in zip(iter_1, iter_2):
    print(a, b)

itertools 有以下配方可以满足您的需求:

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)