在字符串列表中的每个字母之间放置一个符号

rul*_*ler 4 python

我该怎么说!在列表中的每个字符之后

listOne = ["hello","world"]
Run Code Online (Sandbox Code Playgroud)

我怎么把它变成:

["h!e!l!l!o","w!o!r!l!d"]
Run Code Online (Sandbox Code Playgroud)

尝试:

def turn(List):
    return [i for i in (list(lambda x: "%s!" % x,listOne))]
turn(listOne)
Run Code Online (Sandbox Code Playgroud)

返回:

['hello!',"world!"]
Run Code Online (Sandbox Code Playgroud)

除此之外,他们是另一种方式吗?

def turn(List):
    x = ""
    for word in words:
        for letter in word:
            x += "%s!" % letter
    return x
turn(listOne)
Run Code Online (Sandbox Code Playgroud)

我不是那种做这样的事情的忠实粉丝但是我确实意识到这可能比我想做的更加pythonic,这使得尽可能少的线条如此.这可能吗?

aIK*_*Kid 8

您可以使用str.join()方法和列表理解轻松实现此目的:

>>> listOne = ['!'.join(i) for i in listOne]
>>> listOne
Run Code Online (Sandbox Code Playgroud)

产量

['h!e!l!l!o', 'w!o!r!l!d']
Run Code Online (Sandbox Code Playgroud)

或者,正如abarnert建议的那样,您可以使用bulit-in map功能.

>>> listOne = list(map('!'.join, listOne))
>>> listOne
['h!e!l!l!o', 'w!o!r!l!d']
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 还有一条评论:既然我们有一个完全可读的可调用而不需要使用`lambda`或`partial`或其他任何丑陋的东西,我可能会在这里使用`map`:`listOne = map('!'.join,listOne )`.但是在这里使用listcomp绝对没有错. (2认同)