2022年 11月 5日

python字符串排序_Python字符串排序

看了西红柿的博客,此文纯搬运,方便自己查询用。

原文:https://www.cnblogs.com/tomato0906/articles/4890701.html

1、python中的字符串类型是不允许直接修改元素的。必须先把要排序的字符串放在容器里,如list。

python中list容器的sort()函数没有返回值。所以在python中对字符串排序需要好几行代码:

s=”string”

l=list(s)

l.sort()

s=””.join(l)

print s ‘ginrst’

一行代码搞定字符串排序的方法:

s=”string”

s=””.join((lambda x:(x.sort(),x)[1])(list(s)))

———————————————————————————————————

string = ””’

the stirng

Has many

line In

THE fIle”’list_of_string=string.split()print list_of_string #将字符串分离开,放入列表中

print ‘*’*50

defcase_insensitive_sort(liststring):

listtemp= [(x.lower(),x) for x in liststring] #将字符串列表,生成元组,(忽略大小写的字符串,字符串)

listtemp.sort() #对元组排序,因为元组为:(忽略大小写的字符串,字符串),就是按忽略大小写的字符串排序

return [x[1] for x in listtemp]  #排序完成后,返回原字符串的列表

print case_insensitive_sort(list_of_string)  #调用起来,测试一下

2、使用内建函数

sorted(iterable[,cmp[, key[,reverse]]])

Return a new sorted list from the items in iterable.

key specifies a function of one argument that is used to extract a comparison key from each list element:key=str.lower. The default value isNone.

使用参数key=str.lower

代码如下:

defcase_insensitive_sort2(liststring):return sorted(liststring,key = str.lower)

3、

使用list的sort方法:

The sort() method takes optional arguments for controlling the comparisons.

cmp specifies a custom comparison function of two arguments (list items) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: cmp=lambda x,y:cmp(x.lower(), y.lower()). The default value is None.

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None.

reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed

defcase_insensitive_sort3(liststring):

liststring.sort(cmp=lambdax,y: cmp(x.lower(), y.lower()))

case_insensitive_sort3(list_of_string)print list_of_string

———————————————————————————————————————————

根据字符串长度来排序

给定字符串:xs = [‘dddd’,’a’,’bb’,’ccc’]

输出排序的结果:[‘a’,’bb’,’ccc’,’dddd’]

解决1:

xs.sort(key=len)

解决2:

xs.sort(lambda x,y: cmp(len(x), len(y))

注意:当传递lambda给sort时,需要返回integer,而不能为bool数

使用:

xs.sort(lambda x,y: len(x) < len(y))则不对。

——————————————————————————————————————————

python根据字符串中的内嵌的数字排序

l = [ ‘ch9.txt’, ‘ch10.txt’, ‘ch1.txt’, ‘ch3.txt’, ‘ch11.txt’ ]

排序完成后

l=[ ‘ch1.txt’, ‘ch3.txt’, ‘ch9.txt’, ‘ch10.txt’, ‘ch11.txt’ ]

import re

l = [ ‘ch9.txt’, ‘ch10.txt’, ‘ch1.txt’, ‘ch3.txt’, ‘ch11.txt’ ]

p = re.compile(“(\d+)”)

def my_cmp(v1, v2):

d1 = [int(i) for i in p.findall(v1)][0]

d2 = [int(i) for i in p.findall(v2)][0]

return cmp(d1, d2)

l.sort(my_cmp)

print l

>>> import re

>>>

>>> l = [ ‘ch9.txt’, ‘ch10.txt’, ‘ch1.txt’, ‘ch3.txt’, ‘ch11.txt’ ]

>>>

>>> p = re.compile(“(\d+)”)

>>>

>>> def my_cmp(v1, v2):

… d1 = [int(i) for i in p.findall(v1)][0]

… d2 = [int(i) for i in p.findall(v2)][0]

… return cmp(d1, d2)

>>>

… l.sort(my_cmp)

>>>

>>> print l

[‘ch1.txt’, ‘ch3.txt’, ‘ch9.txt’, ‘ch10.txt’, ‘ch11.txt’]

>>>

一句代码足以

l.sort(key = lambda x:int(re.match(‘\D+(\d+)\.txt’,x).group(1)))