1、列表的概念

(1)列表的定义

  • 列表是Python中一种基本的数据结构。列表存储的数据,我们称为元素。在列表中的每个元素都会有一个下标来与之对应,第一个索引是0,第二个索引是1,依此类推的整数。
  • 列表里可以同时储存不同的数据类型,列表里也可以嵌套列表(列表本身也是一种数据类型)。
  • 对列表的操作包括通过索引下标查找展示,通过切片来获取指定部分列表数据。
  • 列表中的对象都会按照插入的顺序存储到列表中,第一个插入的对象保存到第一个位置,第二个保存到第二个位置,则可以称之为列表中的数据有序。
  • 列表是可变类型的数据类型,所以列表是有序的可变的元素集合。

(2)列表的应用场景

思考:有一个人的姓名TOM,怎么存储这个数据?

答:通过变量。

思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?

答:列表即可, 列表一次性可以存储多个数据。

(3)列表的定义格式

  1. [数据1, 数据2, 数据3, 数据4......]

示例

  1. # 1、创建了一个空列表
  2. my_list = []
  3. # 查看列表的类型
  4. print(type(my_list)) # <class 'list'>
  5. """
  6. 空列表只表示你再内存中开辟了一个空间
  7. 用于存储数据,但是现实里边没有任何数据。
  8. """
  9. # 2、创建一个有数据的列表
  10. # 一个列表中可以存储多个元素,
  11. # 也可以在创建列表时,来指定列表中的元素
  12. # (1)创建一个只包含一个元素的列表
  13. my_list = [10]
  14. print(my_list)
  15. # (2)创建一个包含多个元素的列表
  16. # 多个元素之间使用,隔开
  17. my_list = [10,20,30,40,50]
  18. print(my_list)
  19. # 3、列表中可以保存任意的对象,包括函数。
  20. # 结果:[10, 'hello', True, None, [1, 2, 3], <built-in function print>]
  21. my_list = [10,'hello',True,None,[1,2,3],print]

注意:

  • 可以说列表是用来存储对象的对象,列表可以存储所有的数据类型,包括函数都可以同时存储在一个列表中。
  • 但是在我们日常开发中使用列表的时候,一个列表中尽量存储相同的数据类型。
  • 因为不同的数据类型的操作方法是不同的,将来如果要对列表中的数据进行操作,就需要判断各种数据的类型,然后在操作数据,这样就非常麻烦了。

2、列表的常用操作

列表的作用是一次性存储多个数据,程序员可以对这些数据进行的操作有:增、删、改、查。

(1)列表的查找

1)通过下标查找

我们可以通过索引(index)来获取列表中的元素。

索引是元素在列表中的位置,列表中的每一个元素都有一个索引,索引是从0开始的整数,列表第一个位置索引为0,第二个位置索引为1,第三个位置索引为2,以此类推。

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. print(name_list[0]) # Tom
  3. print(name_list[1]) # Lily
  4. print(name_list[2]) # Rose
  5. # 如果使用的索引超过了最大的范围,会抛出异常。
  6. # IndexError: list index out of range
  7. print(name_list[3]) # 异常

提示:列表的下标(索引)和字符串下标(索引)的用用法是一样的。包括正负取值,可以参考着字符串一起学习,这里不在通过列表在说明了。

2)通过方法查找

@1、index()方法

index()方法:返回指定数据所在位置的下标 。

(用法同字符串中index()方法的用法一样)

语法:

  1. 列表序列.index(数据, 开始位置下标, 结束位置下标)

快速体验:

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. print(name_list.index('Lily', 0, 2)) # 1

注意:如果查找的数据不存在则报错。

@2、count()方法

count()方法:统计指定数据在当前列表中出现的次数。

(用法同字符串中count()方法的用法一样)

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. print(name_list.count('Lily')) # 1

@3、len()方法

len()方法:获取列表的长度,即列表中元素的个数。(是一个通用方法)

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. name_list_len = len(name_list)
  3. print(name_list_len) # 3

注意: 获取到的长度的值,是列表的最大索引+1。所以以后在用到列表的最大索引的时候,使用len()-1

3)判断是否存在

这两个方法都是公共方法,代表列表,元祖,字典,字符串都支持的操作。

@1、in

in:判断指定数据是否存在于列表中,如果在返回True,否则返回False

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. # 结果:True
  3. result = 'Lily' in name_list
  4. print(result)
  5. # 结果:False
  6. result1 = 'Lilys' in name_list
  7. print(result1)

@2、not in

not in:判断指定数据是否不在某个列表序列,如果不在返回True,否则返回False。

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. # 结果:False
  3. result = 'Lily' not in name_list
  4. print(result)
  5. # 结果:True
  6. result1 = 'Lilys' not in name_list
  7. print(result1)

示例:

需求:判断用户输入的名字是否已经存在,如果存在,提示用户已存在,否则提示可以注册。

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. name = input('请输入您要搜索的名字:')
  3. if name in name_list:
  4. print(f'您输入的名字是{name}, 名字已经存在')
  5. else:
  6. print(f'您输入的名字是{name}, 名字不存在')

(2)列表的增加

作用:增加指定数据到列表中。

@1、append()方法

append()方法:向列表的结尾添加一个元素。

1)语法

  1. 列表序列.append(数据)

2)示例

  1. """
  2. 输出结果:
  3. 修改前: ['Tom', 'Lily', 'Rose']
  4. 修改后: ['Tom', 'Lily', 'Rose', '孙悟空']
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. print("修改前:", name_list)
  8. name_list.append('孙悟空')
  9. print("修改后:", name_list)

注意一点,列表追加数据的时候,直接在原列表里面追加了指定数据,即修改了原列表,故列表为可变类型数据。

3)追加一个序列

如果append()方法追加的数据是一个序列,则追加整个序列到列表的结尾。

  1. """
  2. 输出结果:
  3. 修改前: ['Tom', 'Lily', 'Rose']
  4. 修改后: ['Tom', 'Lily', 'Rose', ['孙悟空', '猪八戒']]
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. print("修改前:", name_list)
  8. name_list.append(['孙悟空','猪八戒'])
  9. print("修改后:", name_list)

@2、extend()方法

extend()方法:列表结尾追加数据,数据一定是一个序列,则把数据序列里面的数据拆,开然后逐一追加到列表的结尾。

1)语法

  1. 列表序列.extend(数据)

2)快速体验

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. """
  3. 1、单个数据
  4. 输出结果:
  5. 修改前: ['Tom', 'Lily', 'Rose']
  6. 修改后: ['Tom', 'Lily', 'Rose', '孙', '悟', '空']
  7. """
  8. print("修改前:", name_list)
  9. name_list.extend('孙悟空')
  10. print("修改后:", name_list)
  11. """
  12. 2、序列数据
  13. 输出结果:
  14. 修改前: ['Tom', 'Lily', 'Rose']
  15. 修改后: ['Tom', 'Lily', 'Rose', '孙悟空', '猪八戒']
  16. """
  17. name_list = ['Tom', 'Lily', 'Rose']
  18. print("修改前:", name_list)
  19. name_list.extend(['孙悟空','猪八戒'])
  20. print("修改后:", name_list)
  21. """
  22. 3、extend()方法和+=的效果是一样的
  23. 输出结果:
  24. 修改前: ['Tom', 'Lily', 'Rose']
  25. 修改后: ['Tom', 'Lily', 'Rose', '孙悟空', '猪八戒']
  26. """
  27. name_list = ['Tom', 'Lily', 'Rose']
  28. print("修改前:", name_list)
  29. name_list += (['孙悟空','猪八戒'])
  30. print("修改后:", name_list)
  31. """
  32. 4、传入非序列数据
  33. 输出结果:
  34. 异常:
  35. TypeError: 'int' object is not iterable
  36. """
  37. name_list = ['Tom', 'Lily', 'Rose']
  38. print("修改前:", name_list)
  39. name_list.extend(123)
  40. print("修改后:", name_list)

@3、insert()方法

insert()方法:向列表的指定位置插入一个元素。

1)语法

  1. 列表序列.insert(位置下标, 数据)

2)快速体验

  1. """
  2. 输出结果:
  3. 修改前: ['Tom', 'Lily', 'Rose']
  4. 修改后: ['Tom', '孙悟空', 'Lily', 'Rose']
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. print("修改前:", name_list)
  8. name_list.insert(1, '孙悟空')
  9. print("修改后:", name_list)

(3)列表的删除

@1、del

del:可以通过del删除指定下标的数据。

1)语法

  1. del 目标

2)快速体验

  1. name_list = ['Tom', 'Lily', 'Rose']
  2. # 1、删除列表
  3. # 结果:报错提示:name 'name_list' is not defined
  4. # 证明name_list列表被删除,已经不存在了。
  5. del name_list
  6. print(name_list)
  7. # 2、删除指定数据
  8. # 删除索引为1的元素
  9. """
  10. 输出结果:
  11. 删除前: ['Tom', 'Lily', 'Rose']
  12. 删除后: ['Tom', 'Rose']
  13. """
  14. name_list = ['Tom', 'Lily', 'Rose']
  15. print("删除前:", name_list)
  16. del name_list[1]
  17. print("删除后:", name_list)

@2、pop()方法

pop()方法:删除指定下标的数据,如果不指定下标,默认删除最后一个数据,无论是按照下标还是删除最后一个数据,pop()方法都会返回这个被删除的数据。

1)语法

  1. 列表序列.pop(下标)

2)快速体验

  1. """
  2. 1、默认删除最后一个数据
  3. 输出结果:
  4. 删除前: ['Tom', 'Lily', 'Rose']
  5. 删除后: ['Tom', 'Lily']
  6. 删除的数据: Rose
  7. """
  8. name_list = ['Tom', 'Lily', 'Rose']
  9. print("删除前:", name_list)
  10. del_name = name_list.pop()
  11. print("删除后:", name_list)
  12. print("删除的数据:", del_name)
  13. """
  14. 2、删除指定下标的数据
  15. 输出结果:
  16. 删除前: ['Tom', 'Lily', 'Rose']
  17. 删除后: ['Tom', 'Rose']
  18. 删除的数据: Lily
  19. """
  20. name_list = ['Tom', 'Lily', 'Rose']
  21. print("删除前:", name_list)
  22. del_name = name_list.pop(1)
  23. print("删除后:", name_list)
  24. print("删除的数据:", del_name)

@3、remove()方式

remove()方式:根据元素的值进行删除,移除列表中某个数据的第一个匹配项。该方法没有返回值。

1)语法

  1. 列表序列.remove(数据)

2)快速体验

  1. """
  2. 输出结果:
  3. 删除前: ['Tom', 'Lily', 'Rose', 'Tom']
  4. 删除后: ['Lily', 'Rose', 'Tom']
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose', 'Tom']
  7. print("删除前:", name_list)
  8. name_list.remove('Tom')
  9. print("删除后:", name_list)

@4、clear()方法

clear()方法:清空列表。

示例:

  1. """
  2. 输出结果:
  3. 清空前: ['Tom', 'Lily', 'Rose']
  4. 清空后: []
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. print("清空前:", name_list)
  8. name_list.clear()
  9. print("清空后:", name_list)

(4)列表的修改

@1、修改指定下标数据

  1. """
  2. 输出结果:
  3. 修改前 ['Tom', 'Lily', 'Rose']
  4. 修改后 ['孙悟空', 'Lily', 'Rose']
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. print("修改前", name_list)
  8. name_list[0] = '孙悟空'
  9. print("修改后", name_list)

@2、reverse()方法

reverse()方法:逆置(反转)

  1. """
  2. 输出结果:
  3. 修改前: ['孙悟空', '猪八戒', '沙和尚', '唐僧']
  4. 修改后: ['唐僧', '沙和尚', '猪八戒', '孙悟空']
  5. """
  6. name_list = ['孙悟空','猪八戒','沙和尚','唐僧']
  7. print("修改前:", name_list)
  8. name_list.reverse()
  9. print("修改后:", name_list)

@3、sort()方法

sort()方法:排序

1)语法

  1. 列表序列.sort( key=None, reverse=False)

注意:reverse表示排序规则,reverse = True 降序,reverse = False 升序(默认)。

key选项是列表中如果有字典数据,按照字典的key进行排序的时候会用到。

2)快速体验

  1. """
  2. 输出结果:
  3. 修改前: [1, 5, 2, 3, 6, 8]
  4. 修改后: [1, 2, 3, 5, 6, 8]
  5. """
  6. num_list = [1, 5, 2, 3, 6, 8]
  7. print("修改前:", num_list)
  8. num_list.sort()
  9. print("修改后:", num_list)
  10. """
  11. # 降序
  12. 输出结果:
  13. 修改前: ['a', 'j', 'j', 'a', 'f', 'a', 'o', 'u', 'i', 'g', 'h', 'a', 'd', 'j']
  14. 修改后: ['u', 'o', 'j', 'j', 'j', 'i', 'h', 'g', 'f', 'd', 'a', 'a', 'a', 'a']
  15. """
  16. num_list = list('ajjafaouighadj')
  17. print("修改前:", num_list)
  18. num_list.sort(reverse = True)
  19. print("修改后:", num_list)

(5)列表的复制

copy()方法

复制以后的对象,和原对象是独立,修改一个不会影响另一个。

  1. """
  2. 输出结果:
  3. name_list列表: ['Tom', 'Lily', 'Rose']
  4. name_list2列表: ['Tom', 'Lily', 'Rose']
  5. """
  6. name_list = ['Tom', 'Lily', 'Rose']
  7. name_list2 = name_list.copy()
  8. print("name_list列表:", name_list)
  9. print("name_list2列表:", name_list2)

注意:copy()方法字典也通用。

『无为则无心』Python序列 — 18、Python列表概念及常用操作API的更多相关文章

  1. 『无为则无心』Python序列 — 23、Python序列的公共API

    目录 1.运算符 @1.+加号 @2.*乘号 @3.in或not in 2.公共方法 @1.len()方法 @2.del和del() @3.max()方法 @4.min()方法 @5.range() ...

  2. 『无为则无心』Python序列 — 17、Python字符串操作常用API

    目录 1.字符串的查找 @1.find()方法 @2.index()方法 @3.rfind()和rindex()方法 @4.count()方法 2.字符串的修改 @1.replace()方法 @2.s ...

  3. 『无为则无心』Python序列 — 24、Python序列的推导式

    目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...

  4. 『无为则无心』Python序列 — 19、Python列表的其他操作(切片和遍历)

    目录 1.通过切片对列表的操作 (1)通过切片对列表进行修改 (2)通过切片对列表进行删除 (3)注意 2.列表的循环遍历 (1)while循环遍历 (2)for循环遍历 3.列表嵌套 4.综合示例 ...

  5. 『无为则无心』Python基础 — 10、Python字符串的格式化输出

    目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...

  6. 『无为则无心』Python基础 — 12、Python运算符详细介绍

    目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...

  7. 『无为则无心』Python基础 — 13、Python流程控制语句(条件语句)

    目录 1.流程控制基本概念 2.选择结构(条件语句) (1)条件语句概念 (2)if语句语法 (3)if...else...语句 (4)多重判断 (5)if语句嵌套 3.应用:猜拳游戏 4.三元运算符 ...

  8. 『无为则无心』Python基础 — 62、Python中自定义迭代器

    目录 1.迭代器对象的创建 2.实际应用案例 3.总结: 1.迭代器对象的创建 迭代器是一种可以被遍历的对象,并且能够作用于next()函数,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...

  9. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

随机推荐

  1. CocoaPods 构建自己的 Pod 库

    构建一个自己的库供其它人使用是不是一件很酷(苦)的事情,通过CocoaPods 可以快捷的构建自己库,并向全世界分享你的成果 一.创建 Podspec 有两种方式: 使用命令 pod lib crea ...

  2. Canal和Otter讨论二(原理与实践)

    上次留下的问题 问题一: 跨公网部署Otter 参考架构图 解析 ​ a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工 ...

  3. 攻防世界(一)baby_web

    攻防世界系列:baby_web 方法一: 按照提示,初始界面自然想到index.php,访问后界面(注意到URL)仍是1.php 打开hackbar查看响应,发现确实有index.php点开看到了Fl ...

  4. centos7安装google-chrome

    完整的安装步骤:https://www.tecmint.com/install-google-chrome-on-redhat-centos-fedora-linux/ 1.简单安装测试版:sudo ...

  5. 关于C语言的指针数组与指针数组的个人理解

    一.指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]. 在理解指针数组的使用方式前,我先来说下我个人对数组的理解. 比如一维整形数组(形 ...

  6. golang快速入门(五)初尝web服务

    提示:本系列文章适合对Go有持续冲动的读者 初探golang web服务 golang web开发是其一项重要且有竞争力的应用,本小结来看看再golang中怎么创建一个简单的web服务. 在不适用we ...

  7. 五分钟带你读懂 堆 —— heap(内含JavaScript代码实现!!)

    一.概念  说起堆,我们就想起了土堆,把土堆起来,当我们要用土的时候,首先用到最上面的土.类似地,堆其实是一种优先队列,按照某种优先级将数字"堆"起来,每次取得时候从堆顶取.  堆 ...

  8. Tengine MLOps概述

    Tengine MLOps概述 大幅提高产业应用从云向边缘迁移的效率 MLOps Cloud Native 聚焦于提升云端的运营过程效率 MLOps Edge Native 聚焦于解决边缘应用开发及异 ...

  9. YOLOV4各个创新功能模块技术分析(二)

    YOLOV4各个创新功能模块技术分析(二) 四.数据增强相关-GridMask Data Augmentation 论文名称:GridMask Data Augmentation 论文地址:https ...

  10. jmeter工作目录介绍、jmeter元件及组件介绍

    一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...