在下面的代码片段中,我有一段代码目前正在按我希望的方式运行:
def weave_iterable(*iters):
return ''.join('{}'.format('{}'*len(chars)).format(*chars) for chars in zip(*iters))
>>> string1 = 'aeim'
>>> string2 = 'bfjn'
>>> string3 = 'cgko'
>>> string4 = 'dhlp'
>>> string5 = '----'
>>> iterable_args = (string1, string2, string3, string4, string5)
>>> weave_iterable(*iterable_args)
'abcd-efgh-ijkl-mnop-'
但是,我想知道是否有一种更有效和/或更 Pythonic 的方式来格式化我的 weave_iterable
函数返回的文本?具体来说,我想知道是否有任何方法可以避免使用 .format()
两次,因为传入此函数的参数数量未知。我在 Python 2.7 中开发,但很高兴在 Python 3.x 中得到答案
最佳答案
您可以使用 zip
对可迭代对象的相应元素进行分组,itertool.chain
将生成的分组 iterables 扁平化。然后你可以直接将结果传递给 join
方法:
>>> from itertools import chain
>>> l = ['aeim', 'bfjn', 'cgko','dhlp','----']
>>> "".join(chain(*zip(*l)))
>>> 'abcd-efgh-ijkl-mnop-'
你的函数将变成
>>> def weave_iterable(*iters):
return "".join(chain(*zip(*iters)))
关于python - 编织 N 个等长的可迭代参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684260/