• Python list列表---学习总结


    列表是常用的数据类型,可以对数据进行存储和修改。

    定义列表

    1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']

    打印输出列表

    1 >>> print(list_test)
    2 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']

    通过下标访问列表中的元素,列表元素下标从0开始

     1 >>> list_test[0]
     2 'boduo'
     3 >>> list_test[3]
     4 'jize'
     5 >>> list_test[-1] #还能倒着取
     6 'wutenglan'
     7 >>> list_test[6] #当输入下标大于当前列表元素最大下标时,会报错
     8 Traceback (most recent call last):
     9   File "<pyshell#16>", line 1, in <module>
    10     list_test[6] #当输入下标大于当前列表元素最大下标时,会报错
    11 IndexError: list index out of range
    12 >>> 

    切片:切取多个元素

    刚开始接触Python列表切片觉得很神奇,也很灵活,下面直接从使用规律总结一些经验

     1 list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
     2 
     3 print (list_test[0:3]) #截取第一位到第三位的字符
     4 print (list_test[:]) #截取字符串的全部字符
     5 print (list_test[2:]) #截取第二个字符到结尾
     6 print (list_test[:3]) #截取从开头到第三个字符
     7 print (list_test[:-3]) #截取从头开始到倒数第三个字符之前
     8 print (list_test[2]) #截取第三个字符
     9 print (list_test[-1]) #截取倒数第一个字符
    10 print (list_test[::-1]) #创造一个与原字符串顺序相反的字符串
    11 print (list_test[-3:-1]) #截取倒数第三位与倒数第一位之前的字符
    12 print (list_test[-3:]) #截取倒数第三位到结尾
    13 print (list_test[:-4:-2]) #逆序截取 

    1、可见,列表有三个参数的下标有三个参数:beg(起始下标),end(终止下标), step(步长值)

      当 step小于0时,beg默认为len(array)-1,end默认为开头之前。( 补充:此时,beg必须大于end才有结果,否则为空。)

      当 step大于0时,beg默认为0,end默认为最末之后。(补充:此时,beg必须小于end才有结果,否则为空。)

      当 step未给出时: step默认为1。

    2、可见,关于list_test[0:3]切片实际取值列表元素下标范围为0<=x<3,所以才会有截取第一为到第三位的字符,既列表元素下标为0,1,2的。

    3、需要注意的是,列表切片产生的是列表的副本,与原列表不是同一份空间。

     1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
     2 >>> list_sub = list_test[1,3] #注意这里的切片使用的是(:冒号)而不是(,逗号)自己懵逼了
     3 Traceback (most recent call last):
     4   File "<pyshell#85>", line 1, in <module>
     5     list_sub = list_test[1,3] #注意这里的切片使用的是(:冒号)而不是(,逗号)自己懵逼了
     6 TypeError: list indices must be integers or slices, not tuple
     7 >>> list_sub = list_test[1:3]
     8 >>> list_sub
     9 ['xiaoze', 'canglaoshi']
    10 >>> 

    4、钻牛角尖问题(个人感觉这个问题可能钻牛角尖了,过段时间再回看,也请观看的博友能指导下,不胜感激):

    关于下面负索引切片该怎么理解呢

    为什么第2行第4行输出的结果一样,但是到了第6行第8行就不一样了呢

     1  >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
     2  >>> print (list_test[:])
     3  ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
     4  >>> print (list_test[-5:])
     5  ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
     6  >>> print (list_test[::-1])
     7  ['wutenglan', 'jize', 'canglaoshi', 'xiaoze', 'boduo']
     8  >>> print (list_test[-5::-1])
     9  ['boduo']
    10  >>> 

    答案:关于这个(坑爹的)问题我查找了资料已经解决了,这里主要因为步长值对列表切片默认的开始值结束值造成的影响。 

    list[beg:end:step]

    若  step > 0, 则表示从左向右进行切片。此时,beg必须小于end才有结果,否则为空。

    若  step < 0, 则表示从右向左进行切片。 此时,beg必须大于end才有结果,否则为空。

    比如上面代码处第8行,当step(步长值)小 于0,此时列表切片的默认值为beg=-1,end=-5;但是由于我把beg设成-5,导致只能捕获到一个元素。

    所以这就是print(list_test[-5:])与print(list_test[-5::-1])的区别。 

     追加:

    1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
    2 >>> list_test.append('woshixinlaide')
    3 >>> list_test
    4 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan', 'woshixinlaide']
    5 >>> list_test2=['woshixinlaide2','woshixinlaide3']
    6 >>> list_test.append(list_test2)
    7 >>> list_test
    8 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan', 'woshixinlaide', ['woshixinlaide2', 'woshixinlaide3']]
    9 >>> 

    1、这里面需要注意的是第5行第6行,定义一个列表list_test2使用.append追加到list_test中,list_test2列表在list_test中被视为一个元素。

    插入:

     1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
     2 >>> list_test
     3 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
     4 >>> list_test.insert(2,'我是新来的')
     5 >>> list_test
     6 ['boduo', 'xiaoze', '我是新来的', 'canglaoshi', 'jize', 'wutenglan']
     7 >>> list_test2
     8 ['woshixinlaide2', 'woshixinlaide3']
     9 >>> list_test.insert(2,list_test2)
    10 >>> list_test
    11 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我是新来的', 'canglaoshi', 'jize', 'wutenglan']
    12 >>> list_test[2]
    13 ['woshixinlaide2', 'woshixinlaide3']

    1、观察第13行,往列表中插入的对象都视为目标列表中的一个元素

    修改:

     1 >>> list_test
     2 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我是新来的', 'canglaoshi', 'jize', 'wutenglan']
     3 >>> list_test[2]
     4 ['woshixinlaide2', 'woshixinlaide3']
     5 >>> list_test[3]
     6 '我是新来的'
     7 >>> list_test[3] = '我已经来了很久了'
     8 >>> list_test
     9 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我已经来了很久了', 'canglaoshi', 'jize', 'wutenglan']
    10 >>> 

    删除:

     1 >>> list_test
     2 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我已经来了很久了', 'canglaoshi', 'jize', 'wutenglan']
     3 >>> del list_test[2]  #删除指定下标的元素
     4 >>> list_test
     5 ['boduo', 'xiaoze', '我已经来了很久了', 'canglaoshi', 'jize', 'wutenglan']
     6 >>> list_test.remove('我已经来了很久了')  #删除指定元素
     7 >>> list_test
     8 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
     9 >>> list_test.pop()  #删除列表最后一个元素,并返回该元素
    10 'wutenglan'
    11 >>> list_test
    12 ['boduo', 'xiaoze', 'canglaoshi', 'jize']
    13 >>> 

    扩展:

     1 >>> list_test2
     2 ['woshixinlaide2', 'woshixinlaide3']
     3 >>> list_test
     4 ['boduo', 'xiaoze', 'canglaoshi', 'jize']
     5 >>> list_test.extend(list_test2)
     6 >>> list_test
     7 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3']
     8 >>> list_test.extend('xiaoze')  #注意这个特例
     9 >>> list_test
    10 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e']
    11 >>> list_test3 = [['C331',['C332','C333']],['B221','B222'],'A111'] #新建立多级嵌套列表
    12 >>> list_test
    13 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e']
    14 >>> list_test.extend(list_test3)
    15 >>> list_test
    16 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e', ['C331', ['C332', 'C333']], ['B221', 'B222'], 'A111']
    17 >>>

    1、扩展列表list_test,注意list_test2也是一个列表,但使用extend扩展后,列表list_test2中的元素变成列表list_test中的元素

    2、观察第8行特例,当插入一个字符串时,会拆成单个字母

    3、观察第11行的列表list_test3结构并与第16行扩展到列表list_test的结构

    4、可看出,使用列表扩展时会对添扩展内容进行一次细化切片,但只切取一次

    拷贝:

    查看下列网址:

    https://www.cnblogs.com/king-of-purple/p/9420486.html

    统计:

    1 >>> list_test
    2 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e', ['C331', ['C332', 'C333']], ['B221', 'B222'], 'A111']
    3 >>> list_test.count('x')
    4 1
    5 >>> 

    排序&翻转:

     1 >>> list_test4 = ['xiaoze','canglaoshi',11,22,33]
     2 >>> list_test4.sort()      #3.0开始Python不支持不用类型数据的排序
     3 Traceback (most recent call last):
     4   File "<pyshell#162>", line 1, in <module>
     5     list_test4.sort()
     6 TypeError: unorderable types: int() < str()
     7 >>> list_test4[2] = '33'
     8 >>> list_test4[3]='11'
     9 >>> list_test4[4]='22'
    10 >>> list_test4
    11 ['xiaoze', 'canglaoshi', '33', '11', '22']
    12 >>> list_test4.sort()
    13 >>> list_test4
    14 ['11', '22', '33', 'canglaoshi', 'xiaoze']
    15 >>> list_test4.reverse()  #翻转
    16 >>> list_test4
    17 ['xiaoze', 'canglaoshi', '33', '22', '11']
    18 >>> 

    获取下标:

    1 >>> list_test4
    2 ['xiaoze', 'canglaoshi', '33', '22', '11']
    3 >>> list_test4.index('xiaoze')  #获取指定元素的下标
    4 0
    5 >>> 
  • 相关阅读:
    数列变形中隐含条件的指向作用
    有效挖掘题目中的隐含条件[高阶辅导]
    三角模板函数使用示例
    【Machine Learning in Action --2】K-近邻算法构造手写识别系统
    【Machine Learning in Action --2】K-近邻算法改进约会网站的配对效果
    Python使用os.listdir()函数来获得目录中的内容
    【python问题系列--1】SyntaxError:Non-ASCII character 'xe5' in file kNN.py on line 2, but no encoding declared;
    【Python爬虫实战--1】深入理解urllib;urllib2;requests
    Centos7下安装numpy+matplotlib+scipy
    【Machine Learning in Action --1】机器学习入门指南
  • 原文地址:https://www.cnblogs.com/king-of-purple/p/9418408.html
Copyright © 2020-2023  润新知