所以我有一个问题,我有一个像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")
有没有办法以更优雅/ pythonic的方式做到这一点?我认为itertools可以是一个解决方案,但我不知道它是如何工作的。
顺便说一句,我只需要myString
这个循环所以也许生成器(不知道如何使用它,我还在学习)
谢谢:)
答案 0 :(得分:5)
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')
答案 1 :(得分:4)
itertools
具有以下配方,可以完全满足您的需求:
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
答案 2 :(得分:1)
这是一个选项,但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)