在2个以上的字串中交换字母

时间:2018-09-17 17:13:37

标签: python string list

假设我有一个单字字符串(“ Hello”),我想交换第一个和最后一个字母,所以我会这样做:

s="Hello"
l=list(s)
l[0],l[len(l)-1]=l[len(l)-1],l[0]
print("".join(l))

但是,如果我不得不在字符串的每个单词中交换第一个和最后一个字母:“ Hello World”,那么我会得到“ oellH dorlW”怎么办?

我当时在考虑使用嵌套列表,但似乎过于复杂了。

3 个答案:

答案 0 :(得分:3)

字符串是不可变的,因此您可以通过切片来创建一个新字符串:

s = "Hello"
>>> s[-1] + s[1:-1] + s[0]
"oellH"

要创建多个单词,请按以下步骤拆分并重新加入:

s= "Hello World"
>>> ' '.join(word[-1] + word[1:-1] + word[0] for word in s.split())
'oellH dorlW'

答案 1 :(得分:2)

您可以分割字符串,将每个单词交换字母,然后将.join()放回原处:

# example is wrong, does not swap, only puts first in the back. see below for fix
text = ' '.join( t[1:]+t[0] for t in "Hello World".split() )
print (text)

输出:

 elloH orldW

这使用列表理解来提取每个分割的单词(t)-列表切片将前字母移回其后(t[1:]+t[0])和' '.join()以将字符串列表移回到一个字符串。

链接:

它也适用于更长的字符串:

elloH orldW si a eallyr verusedo trings ermt - orF ureS !

正如@Accumulation指出的那样,我误解了问题-我的示例只是将第一个字母放在字符串的末尾,这仅使交换第一个和最后一个字母所做的工作减半:

# t[-1] is the last character put to the front, 
# followed by t[1:-1] 1st to (but not including) the last character 
# followed by t[0] the first character
text = ' '.join( t[-1]+t[1:-1]+t[0] for t in "Hello World".split() )
print (text)

输出:

oellH dorlW 

答案 2 :(得分:1)

    string  = "Hello Planet Earth"

通过在空格字符上分割来制成单词列表

    words = string.split(" ")

然后使用脚本在该列表上进行迭代

    for word in words:
        l = list(word)
        l[0], l[len(l) - 1] = l[len(l) - 1], l[0]
        print("".join(l))