资讯专栏INFORMATION COLUMN

Python中的反转字符串问题

tabalt / 2477人阅读

摘要:按单词反转字符串是一道很常见的面试题。在中实现起来非常简单。上面的实现其实已经能满足大多数情况,但是并不完美。比如第二个字符串中的感叹号并没有被翻转,而且原字符串中的空格数量也没有保留。要改进上面的方案还不把问题复杂化,推荐使用模块。

按单词反转字符串是一道很常见的面试题。在Python中实现起来非常简单。

def reverse_string_by_word(s):
    lst = s.split()  # split by blank space by default
    return " ".join(lst[::-1])

s = "Power of Love"
print reverse_string_by_word(s)
# Love of Power

s = "Hello    World!"
print reverse_string_by_word(s)
# World! Hello

上面的实现其实已经能满足大多数情况,但是并不完美。比如第二个字符串中的感叹号并没有被翻转,而且原字符串中的空格数量也没有保留。(在上面的例子里其实Hello和World之间不止一个空格)

我们期望的结果应该是这样子的。

print reverse_string_by_word(s)
# Expected: !World  Hello

要改进上面的方案还不把问题复杂化,推荐使用re模块。你可以查阅re.split() 的官方文档。我们看一下具体例子。

>>> import re
>>> s = "Hello  World!"

>>> re.split(r"s+", s)    # will discard blank spaces
["Hello", "World!"]

>>> re.split(r"(s+)", s)  # will keep spaces as a group
["Hello", "  ", "World!"]

>>> s = "< Welcome to EF.COM! >"

>>> re.split(r"s+", s)  # split by spaces
["<", "Welcome", "to", "EF.COM!", ">"]

>>> re.split(r"(w+)", s)  # exactly split by word
["< ", "Welcome", " ", "to", " ", "EF", ".", "COM", "! >"]

>>> re.split(r"(s+|w+)", s)  # split by space and word
["<", " ", "", "Welcome", "", " ", "", "to", "", " ", "", "EF", ".", "COM", "!", " ", ">"]

>>> "".join(re.split(r"(s+|w+)", s)[::-1])
"> !COM.EF to Welcome <"

>>> "".join(re.split(r"(s+)", s)[::-1])
"> EF.COM! to Welcome <"

>>> "".join(re.split(r"(w+)", s)[::-1])
"! >COM.EF to Welcome< "

如果你觉得用切片将序列倒序可读性不高,那么其实也可以这样写。

>>> "".join(reversed(re.split(r"(s+|w+)", s)))
"> !COM.EF to Welcome <"

一句话搞定,so easy!

关于作者:Python技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。

欢迎关注我的博客 http://betacat.online,你可以到我的公众号中去当吃瓜群众。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38211.html

相关文章

  • Leetcode 344:Reverse String 反转符串python、java)

    摘要:反转字符串公众号爱写编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组的形式给出。解题思路第一个字符与最后一个交换位置,继而第二个与倒数第二个交换位置,一直交换到到中位数结束。持续交换它们所指向的元素,直到这两个指针相遇。 Leetcode 344:Reverse String 反转字符串 公众号:爱写bugWrite a function that reverses ...

    Ajian 评论0 收藏0
  • Leetcode 344:Reverse String 反转符串python、java)

    摘要:反转字符串公众号爱写编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组的形式给出。解题思路第一个字符与最后一个交换位置,继而第二个与倒数第二个交换位置,一直交换到到中位数结束。持续交换它们所指向的元素,直到这两个指针相遇。 Leetcode 344:Reverse String 反转字符串 公众号:爱写bugWrite a function that reverses ...

    duan199226 评论0 收藏0
  • LeetCode 557:反转符串中的单词 III Reverse Words in a Str

    摘要:公众号爱写给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例输入输出注意在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 Given a string, you need to revers...

    CrazyCodes 评论0 收藏0
  • LeetCode 557:反转符串中的单词 III Reverse Words in a Str

    摘要:公众号爱写给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例输入输出注意在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 Given a string, you need to revers...

    Zachary 评论0 收藏0

发表评论

0条评论

tabalt

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<