• python笔记Ⅳ--序列(列表、切片)


    一、序列:序列是python中最基本的一种数据结构。数据结构指计算机中数据存储的方式。

          序列用于保存一组有序的数据,所有的数据在序列当中都有唯一的位置(索引),并且序列中的数据会按照添加的顺序来分配索引。

    序列的分类:

     (1)可变序列(序列中的元素可以改变):

                ① 列表(list)

     (2)不可变序列(序列中的元素不可以改变):

                ① 字符串(str)
                ② 元组(tuple)

    二、列表:列表是python中的一个对象

    1.列表中可以保存多个有序的数据,列表存储的数据,我们称为元素。一个列表中可以存储多个元素,也可以在创建列表时,来指定列表中的元素。

    my_list = [10] # 创建一个只包含一个元素的列表

    2.列表是用来存储对象的对象,列表中可以保存任意的对象。

    my_list = [10,'hello',True,None,[1,2,3],print]

     3.列表中的对象都会按照插入的顺序存储到列表中, 第一个插入的对象保存到第一个位置,第二个保存到第二个位置。

         我们可以通过索引(index)来获取列表中的元素。索引是元素在列表中的位置,列表中的每一个元素都有一个索引。索引是从0开始的整数,列表第一个位置索引为0,第二个位置索引为1,第三个位置索引为2,以此类推。

    my_list = [10,20,30,40,50]

    通过索引获取列表中的元素:

    语法:

    my_list[索引] my_list[0]

    1. # 如果使用的索引超过了最大的范围,会抛出异常
    2. # print(my_list[5]) IndexError: list index out of range

     注意:列表的索引可以是负数。如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个。

    4.通过len()函数可以获取列表中元素的个数,通过该函数可以获取列表的长度。

    注意:获取到的长度的值,是列表的最大索引 + 1

    print(len(my_list)) # 5

    5.列表的使用:

        (1)列表的创建
        (2)操作列表中的数据

    6.列表的方法----只适用于可变序列

    1. stus = ['路飞','索隆','山治','索隆']
    2. print('原列表:',stus)

    (1)插入的方法

        ① append()----向列表的最后添加一个元素

    stus.append('娜美')

        ② insert()----向列表的指定位置插入一个元素

         参数: Ⅰ、要插入的位置 Ⅱ、要插入的元素

    stus.insert(2,'罗宾')

        ③ extend()----使用新的序列来扩展当前序列。需要一个序列作为参数,它会将该序列中的元素添加到当前列表中

    1. stus.extend(['乌索普','乔巴'])
    2. stus += ['乌索普','乔巴']

    (2)删除的方法

        ① clear()----清空序列

    stus.clear()

        ② pop()----根据索引删除并返回被删除的元素,del没有返回值

    1. result = stus.pop(2) # 删除索引为2的元素
    2. result = stus.pop() # 删除最后一个元素
    3. print('result =',result)

        ③ remove()----删除指定值的元素,如果相同值的元素有多个,只会删除第一个

    stus.remove('索隆')

    (3)reverse()----用来反转列表

    stus.reverse()

    (4)sort()----用来对列表中的元素进行排序,默认是升序排列

    1. my_list = list('gxcggg')
    2. my_list = [10,3,5,78,9,22]
    3. print('修改后:',my_list)

    注意:如果需要降序排列,则需要传递一个reverse=True作为参数

    1. my_list.sort(reverse=True)
    2. print('修改后:',my_list)

    7.遍历列表:指的就是将列表中的所有元素取出来

    1. # 创建列表
    2. stus = ['路飞','索隆','山治','娜美','乌索普','罗宾','布鲁克']

    (1)遍历列表

      ① 通过while循环来遍历列表

    1. 创建一个循环,来打印0-3四个数字
    2. i = 0
    3. while i < len(stus):
    4. print(stus[i])
    5. i += 1

       ② 通过for循环来遍历列表

      语法:
      for 变量 in 序列 :
          代码块

    1. for s in stus :
    2. print(s)

         for循环的代码块会执行多次,序列中有几个元素就会执行几次。
         每执行一次就会将序列中的一个元素赋值给变量。所以我们可以通过变量,来获取列表中的元素。

    (2)range():range()是一个函数,可以用来生成一个自然数的序列

    r = range(5) # 生成一个这样的序列[0,1,2,3,4]

    该函数需要三个参数:
      ① 起始位置(可以省略,默认是0)
      ② 结束位置
      ③ 步长(可以省略,默认是1)

    通过range()可以创建一个执行指定次数的for循环。

    1. for i in range(10):
    2. print(i)

    三、切片:切片指从现有列表中,获取一个子列表

    通过切片来获取指定的元素:

    语法1:

    列表[起始:结束]

    1. stus = ['路飞','索隆','山治','娜美','乔巴','乌索普']
    2. print(stus[1:])
    3. print(stus[:3])
    4. print(stus[:])
    5. print(stus)

    注意:

    (1)通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
    (2)做切片操作时,总会返回一个新的列表,不会影响原来的列表
    (3)起始和结束位置的索引都可以省略不写
        ① 如果省略结束位置,则会一直截取到最后


        ② 如果省略开始位置,则会从第一个位置开始截取 


        ③ 如果开始位置和结束位置全部省略,则相当于创建了一个列表的副本

     

    语法2:

    列表[起始:结束:步长]

    ① 步长表示:每次获取元素的间隔,默认值是1

    print(stus[0:5:3])

    ② 步长不能为0,但是可以是负数

    # print(stus[::0]) ValueError: slice step cannot be zero

    ③ 如果是负数,则会从列表的后部向前边取元素

    print(stus[::-2])

     

    四、序列的通用操作

    1. # 创建一个列表
    2. stus = ['路飞','索隆','山治','娜美','乔巴','乌索普']

     1、+ 和 *

    (1)+可以将两个列表拼接为一个列表

    1. my_list = [1,2,3] + [4,5,6]
    2. print(my_list)

    (2)*可以将列表重复指定的次数

    1. my_list = [1,2,3] * 5
    2. print(my_list)

     2、in 和 not in

    (1)in用来检查指定元素是否存在于列表中。如果存在,返回True,否则返回False。

    1. print('罗宾' not in stus)
    2. print('罗宾' in stus)

    (2)not in用来检查指定元素是否不在列表中。如果不在,返回True,否则返回False

    3、len()获取列表中的元素的个数

    4、min() 获取列表中的最小值,max() 获取列表中的最大值

    1. arr = [10,3,5,7,9,99]
    2. print(min(arr),max(arr))

    5、两个方法(method):方法和函数基本上是一样,只不过方法必须通过 对象.方法() 的形式调用

    (1)s.index()获取指定元素在列表中第一次出现时的索引

    print(stus.index('路飞'))

        index()的第二个参数,表示查找的起始位置,第三个参数,表示查找的结束位置.

    print(stus.index('山治',2,7))

     注意:如果要获取列表中没有的元素,会抛出异常

    print(stus.index('罗宾')) # ValueError: '罗宾' is not in list

    (2)s.count()统计指定元素在列表中出现的次数

    print(stus.count('路飞'))

     五、修改元素

    1. # 创建一个列表
    2. stus = ['路飞','索隆','山治','娜美','乔巴','乌索普']

    1、修改列表中的元素

    (1)直接通过索引来修改元素

    1. stus[0] = 'lufei'
    2. stus[2] = '罗宾'

     (2)通过切片来修改列表

    注意1:在给切片进行赋值时,只能使用序列

    stus[0:2] = 123  # TypeError: can only assign an iterable

     使用新的元素替换旧元素:

    1. stus[0:2] = ['罗宾','布鲁克']
    2. stus[0:2] = ['罗宾','布鲁克','弗兰奇']
    3. stus[0:0] = ['罗宾'] #向索引为0的位置插入元素

     注意2:当设置了步长时,序列中元素的个数必须和切片中元素的个数一致

    stus[::2] = ['罗宾']  # ValueError: attempt to assign sequence of size 1 to extended slice of size 3

    2、 删除元素

    (1)通过del来删除元素

    del stus[2] #删除索引为2的元素

    (2)通过切片来删除元素

    1. del stus[0:2]
    2. del stus[::2]

     注意:以上操作只适用于可变序列。不可变序列无法通过索引来修改。

  • 相关阅读:
    III.二分算法
    基于移动GIS的环保生态管理系统
    基于单片机设计的水平仪(STC589C52+MPU6050)
    二、一起学习Eclipse 安装(Neon 版本)
    字节大佬打造1137页【数据结构与算法】神册!太香了
    基于springboot实现农产品直卖平台系统项目【项目源码+论文说明】计算机毕业设计
    ASTM F404 – 21儿童餐椅标准消费者安全规范测试项目
    Java入坑之语法糖
    swift加载h5页面空白
    maven使用时候出现,jdk1.5的情况的解决办法
  • 原文地址:https://blog.csdn.net/gaoxiaochan/article/details/126629450