Python中没有直接对字符串排序的方法,下面介绍两种方法对字符串进行排序。
第一种方法,将字符串转换成数组,对数组排序后,再转换成字符串。代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def main():
# 字符串
s = "HelloWorld!"
# 转换成数组
l = list(s)
# 对数组排序,注意,该方法没有返回值
l.sort()
# 转换成数组
s = "".join(l)
print(s)
# 结果如下:
# !HWdellloor
if __name__ == "__main__":
main()
第二种方法,原理和上面的一样,只不过是使用lambda表达式。先展示代码,再详细解释代码。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def main():
s = "HelloWorld!"
s = "".join((lambda x: (x.sort(), x)[1])(list(s)))
print(s)
# 结果如下:
# !HWdellloor
if __name__ == "__main__":
main()
来分析分析语句“s = “”.join((lambda x: (x.sort(), x)[1])(list(s)))”。首先最外层是一个很基础的函数,在一个字符串中加入元素(lambda x: (x.sort(), x)[1])(list(s)),该元素是一个匿名函数。代码 (lambda x: (x.sort(), x)[1]) 表示函数体,(list(s)) 表示该函数的参数,就是将 s 转换成 list 传入到该匿名函数中。匿名函数接收 list,在该函数体内用形参 x 表示。函数体内的 (x.sort(), x)[1] 就是该匿名函数的返回值。为什么要这么写的?因为 Python 中 list 的排序方法没有返回值,所以必须先将 list 排序,然后在返回 list。但是匿名函数只能有一句代码,所以用该语句 (x.sort(), x)[1] 来返回排序后的 list。在这个 tuple 中,x.sort() 返回None, 但是此时x已经排好序了,所以第二个 x 已经是有序的 list,最后加一个[1],表示返回的是有序的 x。
代码是网上找的,觉得很精妙,就写一篇自己的理解。