Python 在一个iterable中获取一个元素和以下元素的优雅/高效方法

Python 在一个iterable中获取一个元素和以下元素的优雅/高效方法,python,list,itertools,Python,List,Itertools,所以我有一个问题,我有一个iterable(这里是字符串或列表),比如string=“ABCDEFG”,我想输出如下内容 A-B B-C C-D ... F-G 所以我知道这是可行的(忘了处理Indexer,但不管怎样),但它很难看 for i in range(len(myString)): element1 = myString[i] element2 = myString[i+1] print("theshit") 有没有一种更优雅的方式来实现这一点?我认为it

所以我有一个问题,我有一个iterable(这里是字符串或列表),比如
string=“ABCDEFG”
,我想输出如下内容

A-B
B-C
C-D
...
F-G
所以我知道这是可行的(忘了处理Indexer,但不管怎样),但它很难看

for i in range(len(myString)):
    element1 = myString[i]
    element2 = myString[i+1]
    print("theshit")
有没有一种更优雅的方式来实现这一点?我认为itertools是一个解决方案,但我不知道它是如何工作的

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


谢谢:)

itertools.izip
如果您用序列的尾部压缩序列(您可以使用
itertools.islice
)在这里可能很有用:


这里有一个选择,但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)

如果
inp='ABCDEFG'
那么可能类似于:
list=['%s-%s%](inp[i],inp[i+1])对于范围内的i(len(inp)-1)]
会对你有用吗?你可以做
element1,element2=myString[i:i+2]
@M.Massias我可能会重新添加这个链接作为一个注释,只要提到如果你想用另一种方式做事情,它会很有用。我怀疑有人会偶然发现这个问题,需要以另一种方式做事:)(反之亦然?)不是完全相同的问题,但可能仍然很有趣:
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)