• Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之列表类型(list)


      Python中序列是最基本的数据结构。序列中的每个元素都分配一个数字(他的位置或者索引),第一个索引是0,第二个索引是1,依次类推。Python的列表数据类型类似于C语言中的数组,但是不同之处在于列表数据类型可以包含任何类型的元素。列表示Python最常用的数据类型之一,他可以以作为一个方括号内的逗号分割值出现。像字符串一样也具有增删改查的操作。因此列表是一个有序集合。

      注意:如果列表当中只有一个元素的时候,比如[12, ],需要加一个逗号。目的是一面误解成数学计算意义上的括号。

    1.   列表的简单应用

    1.1   创建列表

      格式:列表名 = [列表选项1,列表选项2,列表选项n]

      创建一个空列表和一个带有不同元素的列表

     1 # 创建一个空列表
     2 list1 = []
     3 print(list1)  # 输出结果: []
     4 # 创建一个带有元素的列表
     5 list1 = [1, ]
     6 list2 = [18, 19, 20, 21, 22]
     7 print(list1)  # 输出结果:[1]
     8 print(list2)  # 输出结果:[18, 19, 20, 21, 22]
     9 # 创建一个带有不同元素类型的列表
    10 list3 = [18, 19, 20, "very", "good"]
    11 print(list3)  # 输出结果:[18, 19, 20, 'very', 'good']

    1.2   列表的常规操作

    1.2.1   列表元素的访问

      同字符串一样通过下标来进行访问

    1 # 列表元素的访问 #
    2 list4 = [1, 2, 3, 4, 5]
    3 print(list4[2])
    4 print(type(list4[2]))
    5 # 输出结果:
    6 # 3
    7 # <class 'int'>

    1.2.2   列表元素的改变

      通过下标的方式更改列表当中的某个值

    1 # 列表元素的改变 #
    2 list4 = [1, 2, 3, 4, 5]
    3 list4[2] = 300
    4 print(list4)
    5 # 输出结果:[1, 2, 300, 4, 5]

    1.2.3  列表元素的删除

    1 # 列表元素的删除 #
    2 list1 = ['physics', 'chemistry', 1997, 2000]
    3 del list1[0]
    4 print(list1)
    5 # 输出结果:['chemistry', 1997, 2000]

    1.2.4   列表的组合

    1 # 列表组合
    2 list5 = [1, 2, 3]
    3 list6 = [4, 5, 6]
    4 list7 = list5 + list6
    5 print(list7)
    6 # 输出结果:[1, 2, 3, 4, 5, 6]

    1.2.5   列表的重复

    1 # 列表的重复
    2 list8 = [1, 2, 3]
    3 print(list8 * 3)
    4 # 输出结果:[1, 2, 3, 1, 2, 3, 1, 2, 3]

    1.2.6   判断元素是否在列表中,返回值为False 或 True,成员运算符(in,not in);身份运算符同理不再举例

    1 # 判断元素是否在列表中
    2 list9 = [1, 2, 3, 4, 5]
    3 print(3 in list9)  # 输出结果:True
    4 print(6 in list9)  # 输出结果:False
    5 print(6 not in list9)  # 输出结果:True

    1.2.7   列表的切片,与字符串切片原理相同

      格式:[[start] [,end] [,step]],开始位置,结束位置,步长

      注意:几到几的指针是放到元素的前面。

     1 # 列表的截取(切片)
     2 # 格式[[start] [,end] [,stet]], 开始位置、结束位置、步长
     3 list10 = ["wuchao", "jinxing", "xiaohu", "sanpang", "ligang"]
     4 print(list10[1:]) # 取到最后,默认步长是1
     5 # 输出结果:['jinxing', 'xiaohu', 'sanpang', 'ligang']
     6 
     7 print(list10[1:-1]) # 取到倒数第二个值,默认步长是1,-1正着取值,指针是放到"ligang"前面的,所以没有"ligang"
     8 # 输出结果:['jinxing', 'xiaohu', 'sanpang']
     9 
    10 print(list10[1:-1:1])  # 从左到右一个一个去取,步长为1
    11 # 输出结果:['jinxing', 'xiaohu', 'sanpang']
    12 
    13 print(list10[1::2])  # 从左到右各一个去取
    14 # 输出结果:['jinxing', 'sanpang']
    15 
    16 print(list10[::-1]) # 把整个表格反转过来
    17 # 输出结果:['ligang', 'sanpang', 'xiaohu', 'jinxing', 'wuchao']
    18 
    19 print(list10[::-1][1:3]) # 取列表中的后两个,第一步反转表格,第二步取前两个
    20 # 输出结果:['sanpang']

    1.2.8   二维列表和三维列表

      二维列表和三维列表,以及其他高维列表的逻辑是在列表内在表示一组列表元素。访问也是通过双下标、三下标或高下标的方式访问,操作高维列表和操作一维列表的逻辑是一样的。

    1 # 二维和三维列表 #
    2 list11 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    3 print(list11[1][1]) # 也是按照下标访问三维列表第二组第二个元素
    4 # 输出结果:5
    5 
    6 list11[1][1] = 100
    7 print(list11) # 改变数值与一位里列表一样
    8 # 输出结果:[[1, 2, 3], [4, 100, 6], [7, 8, 9]]

    2.   列表的常见内建函数的应用

       函:append

        语:append(x)

          用:在列表末尾添加一个新的元素的第一个“元素”

    1 # append
    2 # 作用:在列表末尾添加新的元素的第一个“元素”
    3 list12 = [1, 2, 3, 4, 5]
    4 list12.append(6)
    5 list12.append(7)
    6 list12.append([7, 8, 9])
    7 print(list12)
    8 # 输出结果:[1, 2, 3, 4, 5, 6, 7, [7, 8, 9]]

       函:extend

        语:extend([list])

          用:在列表末尾一次性追加一个列表中的多个值

    1 # extend
    2 # 作用:在列表末尾一次性追加一个列表中的多个值
    3 list13 = [1, 2, 3, 4, 5]
    4 list13.extend([6, 7, 8, 9, 10])
    5 print(list13)
    6 # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

      函:insert

        语:insert([index] [,x])

          用:将数据添加到任意一个位置,在下标处添加一个元素,不覆盖原数据,原数据顺向后延。

    1 # insert
    2 # 作用:在下标处添加一个元素,不覆盖原数据,原数据顺向后延
    3 list14 = [1, 2, 3, 4, 5]
    4 list14.insert(0, 100)  # 在第一个元素前追加一个100
    5 print(list14)
    6 # 输出结果:[100, 1, 2, 3, 4, 5]

      函:pop、del

        语:pop([index])、del list[index]

          用:移除列表中下标处的元素(默认移除最后一个元素[-1]),并返回删除后的数据;删除列表规定下标的某一个元素。

    1 # pop、del
    2 # 作用:移除列表中下标处的元素(默认移除最后一个元素[-1]),并返回删除后的数据
    3 list15 = [1, 2, 3, 4, 5]
    4 list15.pop(-3) # 删除右边数第三个元素
    5 del list15[0]
    6 print(list15)
    7 # 输出结果:[2, 4, 5]

      函:remove

        语:remove(x)

          用:移除remove指定的元素、只能删除一个,估计当初设计整个函数的时候为了防止误删,所以只能删除一个

    1 # remove
    2 # 作用:移除remove指定的元素
    3 list16 = [1, 2, 3, 4, 4, 5]
    4 list16.remove(4)  # 移除列表中某个元素第一个匹配结果
    5 print(list16)
    6 # 输出结果:[1, 2, 3, 4, 5]

      函:clear

        语:clear()

          用:清除列表中的所有元素

    1 # clear
    2 # 作用:清除列表中所有的数据
    3 list17 = [1, 2, 3, 4, 5]
    4 list17.clear()
    5 print(list17)
    6 # 输出结果:[]

      函:index

        语:index(x [,start] [,end])

          用:从列表中找出某个值的第一个匹配的索引值

    1 # index
    2 # 作用:从列表中找出某个值的第一个匹配的索引值
    3 list18 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    4 print(list18.index(3))  # 第一个匹配的位置,同字符串的性质一样如果么有返回报错
    5 print(list18.index(3, 3, 7)) # 指定位置进行查找
    6 # 输出结果:2  5

      函:len

        语:len(list)

          用:获取列表的长度

    1 # len
    2 # 作用:获取列表的长度
    3 list19 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    4 print(len(list19))
    5 # 输出结果:9

      函:max、min

        语:max(list)、min(list)

          用:获取列表中的最大值、获取列表中的最小值

    1 # max、min
    2 # 作用:获取列表中的最大值、获取列表中的最小值
    3 list20 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    4 print(max(list20), min(list20))
    5 # 输出结果:6   1

      函:count

        语:count(x)

          用:统计某个元素在列表中出现的次数

    1 # count
    2 # 作用:统计某个元素在列表当中出现的次数
    3 list21 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    4 print(list21.count(3))  # 统计某个元素在列表当中出现的次数
    5 # 输出结果:2

      函:reverse

        语:reserve()

          用:列表中的元素按照倒序进行排列,如果本身序列按照规则就行排列,reverse函数这是是一个翻转函数(升序,变为逆序;逆序变为升序)

    1 # reverse
    2 # 作用:列表中的元素按照倒序排列
    3 list22 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    4 list22.reverse()
    5 print(list22)
    6 # 输出结果:[6, 5, 4, 3, 5, 4, 3, 2, 1]

      函:sort

        语:sort(list, key =, reverse = false/true)

          用:默认为升序排列的排序方式,其中key可以按照某个键值方式进行排序,reverse可以调用逆序排序。

     1 # sort
     2 # 作用:排序(默认为升序排列)key=字符串用法,reverse=反转用法
     3 list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
     4 list23.sort()
     5 print(list23)
     6 # 输出结果:[1, 2, 3, 3, 4, 4, 5, 5, 6]
     7 
     8 list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
     9 list23.sort(reverse=True)  # 改为降序排列
    10 print(list23)
    11 # 输出结果:[6, 5, 5, 4, 4, 3, 3, 2, 1]
    12 
    13 list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
    14 list23.sort(reverse=False)  # 默认为升序排列
    15 print(list23)
    16 # 输出结果:[1, 2, 3, 3, 4, 4, 5, 5, 6]
    17 
    18 list23 = ['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
    19 list23.sort(key=str.lower)  # 忽略大小写排序
    20 print(list23)
    21 # 输出结果:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']
    22 
    23 list23 = ['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
    24 list23.sort(key = len)  # 按字符串长度进行排序
    25 print(list23)
    26 # 输出结果:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']

    3.   深拷贝和浅拷贝

      内存:
      栈区和堆区
      普通的变量都存在栈区,程序结束自动释放内存空间(系统自动分配,自动开辟,自动释放)
      堆区(程序员手动开辟,手动释放,对象一般都存在堆区)
      变量名存在栈区,通过地址0x1000去访问堆区的数据
      list27 和 list28 地址一样,所以打印出来是一样。浅拷贝也叫引用拷贝。指向的是一个数据
      深拷贝也叫内存的拷贝,全新的地址导致两个变量的指向不一样了。在堆区再开辟一片空间

      举例说明:

     1 # 浅拷贝举例
     2 list27 = [1, 2, 3, 4, 5]
     3 list28 = list27
     4 list28[1] = 200
     5 print(list28)
     6 print(list27)
     7 print(id(list28))
     8 print(id(list27))
     9 # 输出结果:
    10 # [1, 200, 3, 4, 5]
    11 # [1, 200, 3, 4, 5]
    12 # 37310024  
    13 # 37310024  
    14 # 观察这两个列表的id没有发生变化
    15 
    16 # 深拷贝举例
    17 list29 = [1, 2, 3, 4, 5]
    18 list30 = list29.copy()
    19 list30[1] = 200
    20 print(list29)
    21 print(list30)
    22 print(id(list29))
    23 print(id(list30))
    24 # 输出结果:
    25 # [1, 2, 3, 4, 5]
    26 # [1, 200, 3, 4, 5]
    27 # 33716552
    28 # 37340360
    29 # 通过深拷贝两个列表的id已经发生变化了。

    4.  列表常用技巧

      4.1   前面的remove命令只能够移除一次需要移除的元素,通过下面的示例可以把需要移除的元素全部移除掉。

     1 # 累计移除列表中指定的元素
     2 list24 = [1, 2, 3, 4, 5, 3, 3]
     3 num25 = 0
     4 all = list24.count(3)
     5 while num25 < all:
     6     list24.remove(3)
     7     num25 += 1
     8 print(list24)
     9 # 输出结果:
    10 # [1, 2, 4, 5]

      4.2   任意输出五个数,找出第二大的值。

     1 # 任意输入5个数,找出第二大的值
     2 listNum = []
     3 num = 0
     4 while num < 5:
     5     val = int(input("请输入任意五个数: "))
     6     listNum.append(val)
     7     num += 1
     8     print(listNum)
     9 # 升序方法一
    10 listNum.sort()
    11 count = listNum.count(listNum[len(listNum) - 1])
    12 # print(count)
    13 c = 0
    14 while c < count:
    15     listNum.pop()
    16     c += 1
    17 print(listNum[len(listNum) - 1])
    18 
    19 # 精准方法二
    20 listnum = []
    21 val = 0
    22 num = 0
    23 while num < 5:
    24     val = int(input("请连续输入五个自然数:"))
    25     listnum.append(val)
    26     num += 1
    27 print("您连续输入的数字为:" , listnum)
    28 listnum.sort(reverse = True)
    29 print("输入序列的长度为: %d" % len(listnum))
    30 
    31 num1 = 0
    32 while num1 < len(listnum)-1:
    33     if listnum[num1 + 1] < listnum[num1]:
    34         print("您输入序列中的第二大值为: %d" % listnum[num1 + 1])
    35         break
    36     num1 += 1
    37 if listnum.count(listnum[0]) == len(listnum):
    38     print("不存在第二大值,您输入的值都一样大")
    39 # 输出结果1:
    40 # 请连续输入五个自然数:10
    41 # 请连续输入五个自然数:10
    42 # 请连续输入五个自然数:20
    43 # 请连续输入五个自然数:30
    44 # 请连续输入五个自然数:50
    45 # 您连续输入的数字为: [10, 10, 20, 30, 50]
    46 # 输入序列的长度为: 5
    47 # 您输入序列中的第二大值为: 30
    48 
    49 # 输出结果2:
    50 # 请连续输入五个自然数:10
    51 # 请连续输入五个自然数:10
    52 # 请连续输入五个自然数:10
    53 # 请连续输入五个自然数:10
    54 # 请连续输入五个自然数:10
    55 # 您连续输入的数字为: [10, 10, 10, 10, 10]
    56 # 输入序列的长度为: 5
    57 # 不存在第二大值,您输入的值都一样大

     4.3   列表的遍历

      函:enumerate

        语:enumerate(e, start = )

          用:枚举函数,start= 表示从数字几开始记录枚举的起始,如果是0,就为0,1,2,3,4......为序号开始标记;如果为1,就为1,2,3,4,5,为序号开始标记;默认为从0开始。

     1 # 列表的遍历
     2 for i in [100, 200, 300, 400, 500]:
     3     print(i, end=" ")
     4 # 输出结果:100 200 300 400 500
     5 
     6 # 通过枚举的方式遍历列表元素
     7 for i, v in enumerate([100, 200, 300, 400, 500]):
     8     print(i, v)
     9 # 输出结果:
    10 # 0 100
    11 # 1 200
    12 # 2 300
    13 # 3 400
    14 # 4 500
  • 相关阅读:
    php 为什么new一个对象后面要加一个反斜杠
    c# 判断当前时间是否在某一时间段内
    关于Entity Framework的概念及搭建
    mvc 读写txt文档
    winform :DataGridView添加一列checkbox
    使用filter进行登录验证,并解决多次重定向问题
    关于Select选中问题
    错误:Parameter '0' not found.Available parameters are [arg1, arg0, param1, param2]的解决方法
    sql-省市区
    设置oracle主键自增长
  • 原文地址:https://www.cnblogs.com/noah0532/p/8419194.html
Copyright © 2020-2023  润新知