在iterab中获得一个元素和以下元素的优雅/高效的方法

2024-09-30 06:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

A-B
B-C
C-D
...
F-G

所以我知道这是可行的(忘记处理索引器,但无论如何),但它是相当丑陋的。。。你知道吗

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

有没有一种更优雅的方式?我认为itertools是一个解决方案,但我不知道它是如何工作的。。你知道吗

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

谢谢:)


Tags: 字符串in列表forstringlen方式range
3条回答

itertools有以下配方,完全符合您的需要:

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

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')

这里有一个选择,但弗兰里奇的答案肯定是最好的。你知道吗

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

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)

相关问题 更多 >

    热门问题