zoukankan      html  css  js  c++  java
  • 「Python实践」学习之路

    一、列表内容对比

    方式一:

    import operator
    l1 = ['a','b','c']
    l2 = ['a','d','e']
    print(operator.lt(l1,l2))
    运行结果为True

    方式二:

    l1 = ['a','b','c']
    l2 = ['a','d','e']
    s1 = set(l1)
    s2 = set(l2)
    # s1&s2 #列表相同部分
    if s1^s2:
    print(s1^s2)
    print('有不一样的')
    else:
    print('都一样')
    运行结果:
    {'d', 'b', 'e', 'c'}有不一样的

    二、python中的[::-1]和sort()

    1.原址排序

    1)列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。

    1
    2
    3
    = [462179]
    x.sort()
    print # [1, 2, 4, 6, 7, 9]
     

    2.副本排序

    1)[:]分片方法

    1
    2
    3
    4
    5
    =[462179]
    = x[ : ]
    y.sort()
    print #[1, 2, 4, 6, 7, 9]
    print #[4, 6, 2, 1, 7, 9]

    注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。

    2)sorted方法

    sorted返回一个有序的副本,并且类型总是列表,如下:

    1
    2
    3
    4
    =[462179]
    = sorted(x)
    print #[1, 2, 4, 6, 7, 9]
    print #[4, 6, 2, 1, 7, 9] 
    1
    print sorted('Python'#['P', 'h', 'n', 'o', 't', 'y']

    3、高级用法

    1.自定义cmp比较函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def comp(x, y):
    if x < y:
    return 1
    elif x > y:
    return -1
    else:
    return 0
      
    nums = [328 ,0 1]
    nums.sort(comp)
    print nums # 降序排序[8, 3, 2, 1, 0]
    nums.sort(cmp# 调用内建函数cmp ,升序排序
    print nums # 降序排序[0, 1, 2, 3, 8]

    2.自定义key和reverse

    1.reverse实现降序排序,需要提供一个布尔值,默认为False(升序排列)。

    2.key在使用时必须提供一个排序过程总调用的函数:

     
    1
    2
    3
    4
    5
    alist = [('2''3''10'), ('1''2''3'), ('5''6''7'), ('2''5''10'), ('2''4''10')]
    # 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
    print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
    -------------------------------------------------------------------------------------------
    [('1''2''3'), ('5''6''7'), ('2''3''10'), ('2''4''10'), ('2''5''10')]

     4、operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

    1
    2
    3
    4
    5
    6
    7
    = [1,2,3]
    >>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值
    >>> b(a)
    2
    >>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
    >>> b(a)
    (21)

    要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。 

    itemgetter在sort中的用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from operator import itemgetter
     
    alist = [('2''3''10'), ('1''2''3'), ('5''6''7'), ('2''5''10'), ('2''4''10')]
     
    # 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
    print sorted(alist, cmp = None, key = itemgetter(21), reverse = False)
    print sorted(alist, cmp = None, key = lambda x:itemgetter(21)(x), reverse = False)
    print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(21)(x)), reverse = False)
    --------------------------------------------------------------------------------------------------
     
    [('2''3''10'), ('2''4''10'), ('2''5''10'), ('1''2''3'), ('5''6''7')]
    [('2''3''10'), ('2''4''10'), ('2''5''10'), ('1''2''3'), ('5''6''7')]
    [('1''2''3'), ('5''6''7'), ('2''3''10'), ('2''4''10'), ('2''5''10')]

    [::]用法

    a = [0,1,2,3,4,5,6,7,8,9]
    b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
    b = a[1:3] 那么,b的内容是 [1,2]
    当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
    当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
    当i,j都缺省时,a[:]就相当于完整复制一份a了

    b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.
    所以a[i:j:1]相当于a[i:j]
    当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
    所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。所以你看到一个倒序的东东。

    三、group()正则表达式

    正则表达式中,group()用来提出分组截获的字符串,()用来分组

    1
    2
    3
    4
    5
    6
    import re
    = "123abc456"
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456
  • 相关阅读:
    解压bz2包
    Linux获取客户端IP
    出现身份验证错误,要求的函数不受支持,远程计算机
    Ubuntu16.04.4 编译安装ssldump1.1
    windows远程桌面复制不了文件
    MySQL空间数据操作:GeomFromText()和astext()函数报错解决
    mysql中geometry类型的简单使用
    response header的Content-Disposition的inline的作用
    jooq的LocalDateTime转化成LocalDate
    java8 LocalDateTime时间格式化
  • 原文地址:https://www.cnblogs.com/wrxblog/p/9755287.html
Copyright © 2011-2022 走看看