python - 编织 N 个等长的可迭代参数

标签 python string list-comprehension

在下面的代码片段中,我有一段代码目前正在按我希望的方式运行:

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/

相关文章:

python - 在键匹配的地方添加字典值

python - 将 pd.value_counts() 和定义的变量附加到一行数据帧

Python 将一个列表中的元素与另一个列表中的所有元素合并

Python List-comprehension 和多次引用一个对象

分配更多内存时,Python ctypes 结构被覆盖

Python Beautiful Soup 提取 HTML 元数据

asp.net-mvc - 当从 Razor View 接收 POST 请求时,为什么我得到的是 null 而不是空字符串?

string - 写入文件时Golang字符损坏

c - 修复段错误

Haskell 列表理解映射