Haskell:列表元素居中补下划线的更优实现方法咨询
更简洁高效的实现方案
当然有!Python内置的字符串方法str.center()就是为这种场景量身打造的,既简洁又高效,完全不用手动计算左右填充的下划线数量。
核心代码实现
original_list = ["1", "111", "11111", "1111111"] target_width = 11 result = [s.center(target_width, '_') for s in original_list] print(result) # 输出: ['_____1_____', '____111____', '___11111___', '__1111111__']
为什么这个方案更好?
- 简洁性:一行列表推导式+内置方法搞定,逻辑清晰易懂,不用自己写循环计算左右下划线的长度。
- 高效性:
str.center()是Python底层用C实现的方法,比手动通过字符串拼接(比如'_'*left + s + '_'*right)的效率更高,尤其是处理大量元素时优势明显。 - 适配性:因为你提到所需宽度始终为奇数,
str.center()会自动将剩余的填充字符平均分配到左右两侧(总宽度-原字符串长度是偶数,刚好能平分),完美满足居中且左右下划线数量相等的需求。
对比手动实现(仅作参考)
如果不用内置方法,手动计算的代码大概是这样:
original_list = ["1", "111", "11111", "1111111"] target_width = 11 result = [] for s in original_list: padding = target_width - len(s) left_pad = padding // 2 right_pad = padding // 2 result.append('_'*left_pad + s + '_'*right_pad)
虽然能实现同样效果,但代码冗余,而且效率不如内置方法。
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

