• python_List,它不是一个简单的数组


      第一次,学python的时候,我看到列表这个词语,并不知道这是什么东西。听名字,感觉很高大上。当学习列表完,原来只不过就是一个数组(数组的升级版)。

      List是python里面最基本的数据结构。序列中每个元素都是从索引(下标)从0开始,依次叠加。

      List操作的方法很多,只能熟悉基本常用的这个方法。

      第二个数据结构是元祖,元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。

      元祖的方法只有count和index。

      0.创建

      

    1 # list 有两种创建方式
    2 # 第一种
    3 list1 = ["1", "2"]
    4 # 第一种方式等同于第二钟方式,其实也是调用第二种方式创建列表
    5 # 第二种
    6 list(("1", "2"))
    7 # 会自动加载构造函数__init__,内部执行for循环,把元祖转换为列表,相当于创建一个列表

      1.切片(获取多个元素)

    1 poets = ["libai", "dufu", "luyou", "wangwei", "sushi", "qinguan", "qinshaoyou", "liyu", "yanshu"]
    2 poets[1:5]  # 从下标1开始取,至第5个内(不包括5)1 <= x < 5
    3 # ['dufu', 'luyou', 'wangwei', 'sushi']
    4 poets[-1]  # -1直接获取最后一个元素
    5 # yanshu
    6 poets[3:-1]  # 如果想取最后一个元素,不能这样写,这样包含-1在内,应该是这样写 poets[3:]
    7 # ['wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu']
    8 poets[::2]  # 最后一个参数 相当于步长,每隔元素就取一个
    9 # ['libai', 'luyou', 'sushi', 'qinshaoyou', 'yanshu']

     

      2.追加(在某尾添加一个元素)

    1 poets.append("dumu")
    2 # ['libai', 'dufu', 'luyou', 'wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu', 'dumu']
    3 # poets = poets.append("dumu") || print(poets.append("dumu"))  该方法没有返回值,如果这样操作得到结果为none

      3.插入

    1 sancao = ["caozhi", "coacao", "caopi"]
    2 poets.insert(1, sancao)
    3 # ['libai', ['caozhi', 'coacao', 'caopi'], 'dufu', 'luyou', 
    4 # 'wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu', 'dumu']
    5 # 这个方法需要两个参数,选择要插入的位置和要插入的元素 如果只用一个参数,会报错:insert() takes exactly 2 arguments (1 given)
    6 # 第一个参数 只能是数字 不能是字符串  否则会报错: 'str' object cannot be interpreted as an integer
    7 # 第二个参数 可以不填,要填字符串,数字都可以,或者列表等等。。。

      4.更新

      

    poets[1] = "dufu" # 更新好像没什么可以说的,就是这样,选择对应下标的元素覆盖,如果括号没有输入索引,会报错语法错误 invalid syntax
    # poets[] = "ceishi"
    # poets['1'] = "ceishi" # 当然索引只能是整形不能是字符串 list indices must be integers or slices, not str

      5.移除

     

    poets = ["libai", "dufu", "libai", "luyou"]
    poets.remove("libai")
    # ['dufu', 'libai', 'luyou']
    #  选择要移除的元素,不是索引,如果有两个相同元素,只移除第一个匹配项
    # 如果不输入元素,会报错 x not in list 或者放空 remove() takes exactly one argument (0 given)
    poets.pop()  # 默认删除最后一个元素
    # ['dufu', 'libai']
    poets = ["libai", "dufu", "luyou", "wangwei", "sushi", "qinguan", "qinshaoyou", "liyu", "yanshu"]
    poets.pop(4)
    # ['libai', 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
    sancao = ["caocao", "caozhi", "caopi"]
    poets.insert(1, sancao)
    # ['libai', ['caocao', 'caozhi', 'caopi'], 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
    poets.pop(1)  # pop可以删除嵌套中的列表
    # ['libai', 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
    del poets[0:3]  # 删除列表的元素,此方法可以一次性删除多个元素,跟切片道理一样
    # ['wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']

      

      6.扩展(在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表))

      

    1 aList = ["liubei", "guanyu", "zhangfei"]
    2 bList = ["zhaoyun", "machao", "huangzhong"]
    3 aList.extend(bList)
    4 # ['liubei', 'guanyu', 'zhangfei', 'zhaoyun', 'machao', 'huangzhong']
    5 aList.extend("bList")  # 如果是字符串,会把字符串分割依次放入列表中
    6 # ['liubei', 'guanyu', 'zhangfei', 'b', 'L', 'i', 's', 't']
    7 aList.extend(1) # int' object is not iterable 

      7.统计(统计某个元素在列表中出现的次数)

      

    1 List1 = ["a", "v", "b", "a", "a", " ", "",1]
    2 List1.count("")  # 统计元素的个数
    3 # 3
    4 List1.count("")  # 如果不填,应该是统计空格  注意" " 和 ""的区别
    5 # 1
    6 List1.count(1)  # 也可以统计整形的个数
    7 # 1

      8.获取下标

      

    1 List1 = ["a", "v", "b", "a", "a", " ", "", 1]
    2 List1.index("a")  # 如果有多个相同,至返回第一个元素的下标
    3 # 0
    4 List1.index("")
    5 # 6
    6 List1.index("c")  # 如果没找到,如果没有找到对象则抛出异常

      

      9.排序&翻转(对列表的元素进行反向排序)

      

    
    
     1 List3 = ["lin", "huang", "li", 1, 3, 4]
     2 # List3.sort()  # python 版本问题  3.0版本 不支持  数字和字符串排序 unorderable types: int() < str()
     3 # python 2.0版本支持 数字和字符串排序
     4 List3[3] = '1'
     5 List3[4] = '3'
     6 List3[5] = '4'
     7 List3.sort()
     8 # ['1', '3', '4', 'huang', 'li', 'lin']
     9 List3.reverse()
    10 List3
    11 # ['lin', 'li', 'huang', '4', '3', '1']
    
    
    
     

      10.拷贝

      

     1 List1 = ['a', 'b', 'c', 2, 3, 4, [8, 9, 4], 'h']
     2 List2 = List1.copy()  # 复制一份出来
     3 List2[0] = 'A'  # copy只能完整把列表第一层数据复制一份
     4 List2[6][0] = 'k'  # 深层里面列表不会完全复制一份,深层列表都指向同一个内存地址。如果深层的数据很大,整个复制不来很占内存
     5 List1
     6 List2
     7 # ['a', 'b', 'c', 2, 3, 4, ['k', 9, 4], 'h']
     8 # ['A', 'b', 'c', 2, 3, 4, ['k', 9, 4], 'h']
     9 # 如果想实现深层列表完全复制一份,必须调用第三方库
    10 # copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
    11 # copy.deepcopy 深拷贝 拷贝对象及其子对象
    12 import copy
    13 # List3 = List1.deepcopy()  # 深copy

      11.判断一个列表是否为空

     1 menghuan = ["jianxiage", "xiaoyaosheng", "gujingling", "shentianbing", "longtaizi"]
     2 if len(menghuan):
     3     print("list have %s element" % len(menghuan))
     4 else:
     5     print("list is empty")
     6 # 由于一个空列表等于false,所以可以简化len(List)
     7 menghuan = []
     8 if menghuan:
     9     print("not empty")
    10 else:
    11     print("empty")
    12 
    13 
    14 list1 = ["a", "b", "c", "d", 2, 3, 4, 2, 4, "ds", 23, 23, 12, "qw", "23"]
    15 # 元素是否存在于列表中
    16 if 2 in list1:
    17     num_of_ele = list1.count(2)
    18     position_of_ele = list1.index(2)
    19     print(" [%s]  is in list1, position[%s]" % (num_of_ele, position_of_ele))

      12.迭代器

      

    1 # 遍历列表同时获取索引
    2 i = 0
    3 for element in list1:
    4     print(element)
    5     i += 1
    6 # 既要遍历索引又要遍历元素时 这样写更简洁些
    7 for i, element in enumerate(list1):  # enumerate是python的内置函数,在字典上是枚举、列举的意思
    8     print(i)
    9     print(element)

      

  • 相关阅读:
    Java的代码风格
    哪些你容易忽略的C语言基础知识
    Java基础学习笔记第二章
    Java代码性能优化总结
    Java并发编程(2):线程中断(含代码)
    C语言代码训练(一)
    数控G代码编程详解大全
    PLC编程算法
    博客转移到新地址
    一些吐槽
  • 原文地址:https://www.cnblogs.com/lzy007/p/6135580.html
Copyright © 2020-2023  润新知