接受迭代和 returns 字符串的函数
function that takes iterables and returns a string
def alternate(*args):
l = ''
c = 0
while True:
try:
iterable = args[c]
i = iter(iterable)
l = l + next(i)
c = c + 1
except:
break
yield l
备用生成器将任意数量的可迭代对象作为参数:它从第一个参数生成第一个值,然后从第二个参数生成第一个值,...,然后从最后一个参数生成第一个值;然后是第一个参数的第二个值,然后是第二个参数的第二个值,...,然后是最后一个参数的第二个值;等等。如果任何可迭代对象不再产生任何值,则此生成器将不再产生任何值。例如:
for i in alternate('abcde','fg','hijk'):
print(i,end='')
答案是:
afhbgic
当我的函数需要
('abcde','fg','hijk')
它returns
afh
但正确答案是
afhbgic
有人可以告诉我如何解决吗?非常感谢!
这样的解决方案怎么样:
def alternate(*args):
l = ''
# initialize iterators for each argument
iterators = [iter(it) for it in args]
# iterate over lengths, using iterators
while True:
for it in iterators:
try:
l = l + next(it)
except StopIteration:
return l
return l
result = alternate('abcde','fg','hijk')
print(result) # afhbgic
如果你必须有发电机,你可以使用itertools.zip_longest
(izip_longest
如果使用Python2.x):
from itertools import zip_longest
def alternate(*args):
for tup in zip_longest(*args):
for el in tup:
if el:
yield el
else:
return
输出:
>>> ''.join(alternate('abcde','fg','hijk'))
'afhbgic'
>>>
否则,使用普通函数即可:
from itertools import zip_longest
def alternate(*args):
s = ''
for tup in zip_longest(*args):
for el in tup:
if el:
s += el
else:
return s
输出:
>>> alternate('abcde','fg','hijk')
'afhbgic'
>>>
我就是喜欢这样的疯狂,抱歉:)
alternate = lambda args: ''.join(
filter(
lambda _, p={1:1}: _ if _ and p else p.clear(),
reduce(
lambda x,y: x+y,
map(None, *args)
)
)
)
def alternate(*args):
l = ''
c = 0
while True:
try:
iterable = args[c]
i = iter(iterable)
l = l + next(i)
c = c + 1
except:
break
yield l
备用生成器将任意数量的可迭代对象作为参数:它从第一个参数生成第一个值,然后从第二个参数生成第一个值,...,然后从最后一个参数生成第一个值;然后是第一个参数的第二个值,然后是第二个参数的第二个值,...,然后是最后一个参数的第二个值;等等。如果任何可迭代对象不再产生任何值,则此生成器将不再产生任何值。例如:
for i in alternate('abcde','fg','hijk'):
print(i,end='')
答案是:
afhbgic
当我的函数需要
('abcde','fg','hijk')
它returns
afh
但正确答案是
afhbgic
有人可以告诉我如何解决吗?非常感谢!
这样的解决方案怎么样:
def alternate(*args):
l = ''
# initialize iterators for each argument
iterators = [iter(it) for it in args]
# iterate over lengths, using iterators
while True:
for it in iterators:
try:
l = l + next(it)
except StopIteration:
return l
return l
result = alternate('abcde','fg','hijk')
print(result) # afhbgic
如果你必须有发电机,你可以使用itertools.zip_longest
(izip_longest
如果使用Python2.x):
from itertools import zip_longest
def alternate(*args):
for tup in zip_longest(*args):
for el in tup:
if el:
yield el
else:
return
输出:
>>> ''.join(alternate('abcde','fg','hijk'))
'afhbgic'
>>>
否则,使用普通函数即可:
from itertools import zip_longest
def alternate(*args):
s = ''
for tup in zip_longest(*args):
for el in tup:
if el:
s += el
else:
return s
输出:
>>> alternate('abcde','fg','hijk')
'afhbgic'
>>>
我就是喜欢这样的疯狂,抱歉:)
alternate = lambda args: ''.join(
filter(
lambda _, p={1:1}: _ if _ and p else p.clear(),
reduce(
lambda x,y: x+y,
map(None, *args)
)
)
)