zoukankan      html  css  js  c++  java
  • 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)))
  • 相关阅读:
    原型模式
    单例模式-2(注册式单例)
    单例模式-1(懒汉式、饿汉式)
    PBKDF2加密的实现
    vue中获取客户端IP地址
    微信公众平台,监听用户输入及事件
    详解二叉树的遍历-前中后序遍历/层序遍历-递归/迭代
    联想小新pro关机变慢的解决办法
    MySQL自学笔记系列
    MySQL入门-首先搞清楚【数据类型】
  • 原文地址:https://www.cnblogs.com/yun1108/p/8967165.html
Copyright © 2011-2022 走看看