关于python字符串排序的代码大家都能查到
这里记录一下我对这串代码的理解
s = 'zxcvbnm'
s = ''.join((lambda x:(x.sort(),x)[1])(list(s)))
print(s)
将 lambda 表达式转化为自定义函数来理解,即:
def SortStr(x):
return (x.sort(),x)[1]
s = 'zxcvbnm'
s = ''.join(SortStr(list(s)))
print(s)
函数返回值为一个元组的第二个元素,即 x
在返回 x
之前,x.sort()
将 x
排序了,因此返回的 x
是经过排序的 x
有朋友不清楚第为什么不能像下面这样写:
s = 'zxcvbnm'
s = ''.join((lambda x: x.sort())(list(s)))
print(s)
为了解释这个问题,我们可以试试执行下面的代码
s = [1, 3, 2]
print(s.sort())
结果为None
,可以看出:
对于任何一个列表s
,s.sort()
将s
排序,但是没有返回值
因此如果将(x.sort(),x)[1]
换成x.sort()
,lambda表达式的结果是None
,再执行''.join()
,程序会报错。
如果字符串排序的同时要去掉重复字符,可以利用 set()
:
s = 'zxcvbnm'
s = ''.join((lambda x:(x.sort(),x)[1])(list(set(s))))
print(s)