Python 在一个iterable中获取一个元素和以下元素的优雅/高效方法
所以我有一个问题,我有一个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
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)