首页 > 解决方案 > 如何将 ljust() 转换应用于字符串列表的每个元素?

问题描述

我正在学习 python,我试图在一些示例文本的每一行前面添加 2 **。但是,当我在每个元素上调用 ljust(2,'*') 时,它不会更改原始字符串。我想用这个旧字符串替换新元素,但是如何?

这是我尝试过的。首先,我使用常规的 for 循环尝试了它,但没有奏效。然后我遇到了一个解释列表推导的问题对 Python 列表中的每个元素执行字符串操作,所以我尝试了。

这就是我现在拥有的

example_string = '''hello there how are you doing!
i am doig well thank you
lets get to work!!! '''


def modify_example_string():
    global example_string
    new_string_list = [element.ljust(2,'*') for element in example_string.split('\n')]
    example_string = '\n'.join(new_string_list)
    print(new_string_list)

modify_example_string()

这应该返回一个包含所有 ljust 转换的新列表,但它没有,所以我想知道解决这个问题的正确方法。

标签: pythonpython-3.x

解决方案


好像你误解了ljust(2, '*')正在做的事情。它不会*在字符串的开头添加两个,但会将字符串填充*到总长度为 2。所有行都更长,所以它什么都不做。

相反,只需使用"**" + line将星星添加到线条中。

def modify_example_string():
    global example_string
    example_string = "\n".join("**" + line for line in example_string.splitlines())

另外,global我建议不要使用参数和返回值:

def prepend_stars(s):
    return "\n".join("**" + line for line in s.splitlines())

example_string = prepend_stars(example_string)

推荐阅读