Python字符串排序的两种方法详解

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。
代码是网上找的,觉得很精妙,就写一篇自己的理解。

你可能感兴趣的:(Python)