python字符串排序
http://www.docin.com/p-632146211.html
1、python中的字符串类型是不允许直接修改元素的。必须先把要排序的字符串放在容器里,如list。
2、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)))
---------------------------------------------------------------------------------------------------------
python_忽略大小写对字符串列表排序
直接上代码
- string = '''''
- the stirng
- Has many
- line In
- THE fIle
- '''
- list_of_string = string.split()
- print list_of_string #将字符串分离开,放入列表中
- print '*'*50
- def case_insensitive_sort(liststring):
- listtemp = [(x.lower(),x) for x in liststring] #将字符串列表,生成元组,(忽略大小写的字符串,字符串)
- listtemp.sort()<span style="white-space:pre"> </span>#对元组排序,因为元组为:(忽略大小写的字符串,字符串),就是按忽略大小写的字符串排序
- return [x[1] for x in listtemp] #排序完成后,返回原字符串的列表
- print case_insensitive_sort(list_of_string) #调用起来,测试一下
结果:
- ['the', 'stirng', 'Has', 'many', 'line', 'In', 'THE', 'fIle']
- **************************************************
- ['fIle', 'Has', 'In', 'line', 'many', 'stirng', 'THE', 'the']
另一种方法:
使用内建函数
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
代码如下:
- def case_insensitive_sort2(liststring):
- return sorted(liststring,key = str.lower)
效果一样~
方法三:
使用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.
- def case_insensitive_sort3(liststring):
- liststring.sort(cmp=lambda x,y: cmp(x.lower(), y.lower()))
- case_insensitive_sort3(list_of_string)
- print list_of_string
但这次调用的时候就有区别了。。。
--------------------------------------------------------------------------------------------------------------------
根据字符串长度来排序
给定字符串:xs = ['dddd','a','bb','ccc']
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)))