如何用一行表达式实现字符串所有字符的竖线包裹?
字符串字符竖线包裹的简洁实现方案
需求回顾
将字符串中的每个字符用竖线(|)包裹,示例如下:
'abc' => '|a|b|c|' 'abcde' => '|a|b|c|d|e|' 'x' => '|x|' '' => '|'现有循环实现示例:
s = 'abcde' t = '|' for c in s: t += c + '|' print(t) # |a|b|c|d|e|
一行表达式实现方案
推荐以下几种简洁高效的写法,均能覆盖包括空字符串在内的所有场景:
方案1:join + 列表拼接(最优解)
这是最简洁且无需额外判断的实现方式,同时也是Python中字符串拼接的高效方案:
result = '|'.join([''] + list(s) + [''])
原理:
- 将空字符串、原字符串拆分成的字符列表、空字符串拼接成新列表(如
s='abc'会得到['', 'a', 'b', 'c', '']) - 用
|连接这个列表,直接生成目标格式;空字符串场景下,列表为['', ''],连接后正好是|
方案2:f-string + 三元表达式
写法更直观,但需要处理空字符串的边界:
result = f"|{'|'.join(s)}|" if s else '|'
原理:
- 用
'|'.join(s)将字符用|连接,再通过f-string前后包裹| - 三元表达式判断空字符串,返回
|而非||
与循环实现的对比
你提供的循环实现逻辑正确,但存在性能劣势:Python中字符串是不可变类型,每次+=操作都会生成新的字符串对象,处理长字符串时效率较低。而join方法内部做了优化,是Python官方推荐的字符串拼接方式,既简洁又高效。
内容的提问来源于stack exchange,提问作者no comment
相关产品推荐
相关产品推荐

