import itertools
def task(kw,text):
i = itertools.cycle(kw)
return tuple(next(i)+t if t.isalpha() else t for t in text)
print(task('lemon','hi there!'))
from itertools import cycle, islice, izip
def characterZip( keyword, textline ):
textline = removeWhitespace(textline)
textlen = len(textline)
it = islice( izip(cycle(keyword), textline), textlen )
return [ '%s%s' % val for val in it ]
这里有一个解决方案:
输出
^{pr2}$itertools.cycle重复遍历一个序列(字符串是一个字符序列)。next从重复序列中获取下一个字符。如果文本字符是字母,generator expression选择下一个关键字字母和文本字符对,否则它只选择非字母字符。在
我想您可以在这种情况下使用
enumerate
:这给了你:
^{pr2}$你可以以此作为你操纵的依据。在
你把两个问题混成了一个。第一个问题是:如何从字符串中删除非字母数字字符?有几种方法可以实现,但正则表达式替换是一种不错的方法。在
问题的第二部分是关于如何在关键字中循环,直到文本行被消耗。你可以这样写:
^{pr2}$大多数pythonists都会看到这一点并看到重构的机会。这段代码试图实现的模式是在称为
zip
的函数式编程中实现的。奇怪的是,在本例中,您对关键字的重复字符进行了稍微不规范的处理,这也有一个等价的函数,itertools模块中的cycle函数。在相关问题 更多 >
编程相关推荐