此问题与this,this和this有些相关。假设我有两个不同长度的生成器/迭代器:
>>> for c, i in zip(s, r) :
... print(c, i)
...
a 0
b 1
c 2
d 3
e 4
我现在想重复迭代较短的一个,直到较长的一个用尽。标准zip()
函数在两者中较短的一个用完后终止:
>>> def endless_s(s) :
... while True :
... for c in s :
... yield c
我能想到的最好的方法是将字符串包装成一个生成器,如下所示:
>>> _s = endless_s(s)
>>> for c, i in zip(_s, r) :
... print(c, i)
...
a 0
b 1
c 2
d 3
e 4
a 5
b 6
c 7
d 8
e 9
a 10
b 11
c 12
d 13
e 14
a 15
给了我想要的结果
@font-face {
font-family: 'BrauerNeue';
src: url(brauerneue.ttf);
}
h1 {
font-family: 'BrauerNeue';
}
现在我想知道:有更好更紧凑的方式吗?就像一个无尽的字符串连接,或者一些这样的?
答案 0 :(得分:2)
您可以使用itertools.cycle
执行此操作:
使迭代器从iterable返回元素并保存a 每个的副本。当iterable耗尽时,返回from中的元素 保存副本。无限期地重复。
可以完全替换你的功能:
from itertools import cycle as endless_s