将字符串与列表条目合并 - 交替

时间:2016-09-06 13:36:37

标签: python

所以,我试图“合并”一个字符串(var_dump(apc_cache_info());)和一个字符串列表(a):

b

获得所需的输出(a = '1234' b = ['+', '-', ''] ):

c

所需输出字符串中的字符在字符串和列表之间的原点方面交替。此外,列表将始终包含一个小于字符串中字符的元素。我想知道最快的方法是什么。

我到目前为止的内容如下:

c = '1+2-34'

但我觉得有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:7)

您可以使用itertools.zip_longest zip这两个序列,然后在较短的序列用完字符后继续迭代。如果你的字符用完了,你就会开始回复None,所以只需消耗其余的数字字符。

>>> from itertools import chain
>>> from itertools import zip_longest
>>> ''.join(i+j if j else i for i,j in zip_longest(a, b))
'1+2-34'

作为评论中建议的@deceze,您还可以将fillvalue参数传递给zip_longest,这将插入空字符串。我建议他的方法,因为它更具可读性。

>>> ''.join(i+j for i,j in zip_longest(a, b, fillvalue=''))
'1+2-34'

@ShadowRanger建议的进一步优化是删除临时字符串连接(i+j)并将其替换为itertools.chain.from_iterable来代替

>>> ''.join(chain.from_iterable(zip_longest(a, b, fillvalue='')))
'1+2-34'