У меня есть предопределенные функции lets(string)
:Как написать func, чтобы получить первый/второй/третий и т. Д. Из каждого итератора без использования itertools?
def lets(string):
for i in range(len(string)):
yield string[i]
И мне нужно, чтобы определить альтернативную функцию, которая принимает число итерируемых:
def alternate(*args):
...
и использование этой функции в этих двух способах предположит, изготавливал результат как следующее:
' '.join([str(i) for i in alternate('abcde','fg','hijk')])
-->a f h b g i c j d k e
' '.join([str(i) for i in alternate(lets('abcde'),lets('fg'),lets('hijk'))])
-->a f h b g i c j d k e
Я пробовал несколько способов определить альтернативу знаниями Я знаю, что до сих пор, но я никогда не смогу сделать это, вот мой самый близкий вариант:
def alternate(*args):
n=0
while n in range(11):
for i in args:
try:
yield list(i)[n]
except :
yield next(iter(i))
n+=1
Но это дает мне:
' '.join([str(i) for i in alternate('abcde','fg','hijk')])
-> a f h b g i c f j d f k e f h a f h a f h a f h a f h a f h a f h
' '.join([str(i) for i in alternate(lets('abcde'),lets('fg'),lets('hijk'))])
-> a f h
Может кто-то пожалуйста, помогите мне с этим, я новичок использовать генератор python, действительно оценили!
код [itertools рецепт раздел] (https://docs.python.org/2/library/itertools.html#recipes) имеет 'roundrobin()' функция, которая делает именно это. –
Кроме того, это не проблема, о которой вы просили, но вы можете перебирать строки с циклом for, например 'for s в строке:' get 's', который является символом в определенной точке – muthan