• 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  
      
      
    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)  #调用起来,测试一下  

    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

    代码如下:

    def case_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

    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'] 

    输出排序的结果:['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)))
  • 相关阅读:
    ThinkPHP5专题
    php截取中文字符串
    跨域/非跨域接口专题
    JS检查输入项是否为手机号码或者固话号码的正则表达式
    TinkPHP去重统计查询
    模型类设计模式
    经典排序方法 python
    leetcode122 买卖股票的最佳时机 python
    找到链表的倒数第k个节点 python
    链表的实现、输出和反向 python
  • 原文地址:https://www.cnblogs.com/yun1108/p/8967165.html
Copyright © 2020-2023  润新知