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

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

a = '1234'
b = ['+','-','']

获得所需的输出(c):

c = '1+2-34'

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

到目前为止我所拥有的是以下内容

c = a[0]
for i in range(len(b)):
    c += b[i] + a[1:][i]
print(c)  # prints -> 1+2-34

但我觉得有更好的方法来做到这一点..

解决方法

您可以使用 itertools.zip_longest来压缩两个序列,然后在较短的序列用完字符后继续迭代.如果你的字符用完了,你就会开始获得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,b,fillvalue=''))
'1+2-34'

@ShadowRanger建议的进一步优化是删除临时字符串连接(i j)并用itertools.chain.from_iterable调用替换它们

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

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...