列表(list)篇(一)

文章目录

  • 2.1 创建列表
  • 2.2 append()函数
  • 2.3 clear()函数
  • 2.4 copy()函数
  • 2.5 count()函数
  • 2.6 del
  • 2.7 enumerate()函数
  • 2.8 extend()函数
  • 2.9 index()函数

2.1 创建列表

在Python中,列表(list)是一种基础的数据结构,可以包含不同类型的元素,并且这些元素是有序排列的。列表的元素可以是整数、浮点数、字符串、布尔值,甚至是其他列表(嵌套列表)等。

要定义一个列表,你可以使用方括号 [],并在其中放置用逗号分隔的元素。下面是一些示例:

# 定义一个空列表
empty_list = []# 定义一个包含整数的列表
integer_list = [1, 2, 3, 4, 5]# 定义一个包含不同类型元素的列表
mixed_list = [1, "hello", 3.14, True]# 定义一个包含嵌套列表的列表
nested_list = [1, [2, 3], [4, [5, 6]]]# 使用列表推导式定义一个列表,包含0到9的平方
squared_list = [x**2 for x in range(10)]# 输出列表
print(empty_list)
print(integer_list)
print(mixed_list)
print(nested_list)
print(squared_list)当你运行这些代码时,你将看到如下输出:[]
[1, 2, 3, 4, 5]
[1, 'hello', 3.14, True]
[1, [2, 3], [4, [5, 6]]]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

列表提供了许多内置的方法和操作,例如 append() 来添加元素,remove() 来删除元素,pop() 来移除并返回列表的最后一个元素,index() 来查找元素的索引等。这些方法和操作使得列表成为Python中非常灵活和有用的数据结构。

2.2 append()函数

在Python中,list 是一种数据结构,用于存储一系列有序的元素。append() 是 list 类型的一个方法,用于在列表的末尾添加一个新元素。

以下是 append() 方法的基本用法:

# 创建一个空列表
my_list = []# 使用append()方法向列表中添加元素
my_list.append(1)  # 列表变为 [1]
my_list.append(2)  # 列表变为 [1, 2]
my_list.append(3)  # 列表变为 [1, 2, 3]# 打印列表以查看结果
print(my_list)  # 输出: [1, 2, 3]

append() 方法只接受一个参数,即要添加到列表末尾的元素。它不会返回新的列表,而是直接修改原始列表。

需要注意的是,append() 是在列表的末尾添加元素,而不是在指定索引位置。如果你需要在特定索引位置插入元素,应使用 insert() 方法:

# 在索引1的位置插入元素'b'
my_list.insert(1, 'b')  # 列表变为 [1, 'b', 2, 3]print(my_list)  # 输出: [1, 'b', 2, 3]

在这个例子中,‘b’ 被插入到 my_list 的第二个位置(索引为1,因为索引是从0开始的)。

2.3 clear()函数

在Python中,list 类型有一个 clear() 方法,用于移除列表中的所有元素,将其变为一个空列表。这个方法不接受任何参数,并且没有返回值。调用 clear() 之后,原来的列表将不再包含任何元素。

下面是一个使用 clear() 方法的例子:

# 创建一个包含元素的列表
my_list = [1, 2, 3, 4, 5]# 打印原始列表
print("Original list:", my_list)  # 输出: Original list: [1, 2, 3, 4, 5]# 使用clear()方法清空列表
my_list.clear()# 打印清空后的列表
print("Cleared list:", my_list)  # 输出: Cleared list: []

在这个例子中,my_list 初始时包含5个元素。调用 my_list.clear() 之后,列表中的所有元素都被移除了,my_list 变成了一个空列表。

需要注意的是,clear() 方法直接修改了原始列表,而不是创建一个新的空列表。因此,调用 clear() 之后,原来指向该列表的所有变量和引用都将反映出列表已被清空的状态。

与 clear() 方法类似,但效果不同的是 del 语句。使用 del 语句可以删除整个列表对象:

# 删除整个列表对象
del my_list# 尝试访问已删除的列表会引发错误
# print(my_list)  # NameError: name 'my_list' is not defined

在这种情况下,my_list 这个变量名将不再存在,而不是仅仅其引用的列表内容被清空。如果尝试访问已删除的变量,将会引发 NameError。

2.4 copy()函数

在Python中,list的copy()方法用于创建列表的一个浅拷贝(shallow copy)。这意味着新列表是原始列表的一个新实例,但它包含的元素仍然是原始列表中元素的引用,而不是新创建的对象。

这里是如何使用copy()方法的示例:

# 创建一个原始列表
original_list = [1, 2, 3, [4, 5]]# 使用copy()方法创建列表的拷贝
copied_list = original_list.copy()# 打印原始列表和拷贝的列表
print("Original list:", original_list)
print("Copied list:", copied_list)# 修改原始列表中的一个元素
original_list[0] = 100# 打印修改后的原始列表和拷贝的列表
print("Modified original list:", original_list)
print("Copied list after modification of original:", copied_list)# 修改原始列表中的一个嵌套列表
original_list[3][0] = 400# 打印修改后的原始列表和拷贝的列表
print("Modified original list with nested list change:", original_list)
print("Copied list after modification of nested list in original:", copied_list)

输出结果将会显示,尽管我们修改了原始列表中的元素和嵌套列表,但拷贝的列表并没有受到这些修改的影响。这是因为copy()创建了原始列表的一个新实例,但内部元素仍然是原始元素的引用。

需要注意的是,如果列表包含可变对象(如列表、字典等),那么对原始列表中的这些对象的修改也会反映在拷贝的列表中,因为拷贝的列表包含的是对这些对象的引用,而不是对象的新副本。这被称为浅拷贝。如果你希望创建一个完全独立的副本,包括内部对象的新副本,那么你需要使用深拷贝(deep copy),可以使用copy模块的deepcopy()函数来实现。

import copy# 创建一个原始列表
original_list = [1, 2, 3, [4, 5]]# 使用deepcopy()方法创建列表的深拷贝
deep_copied_list = copy.deepcopy(original_list)# 修改原始列表中的嵌套列表
original_list[3][0] = 400# 打印原始列表和深拷贝的列表
print("Original list with nested list change:", original_list)
print("Deep copied list after modification of nested list in original:", deep_copied_list)

在这个例子中,即使我们修改了原始列表中的嵌套列表,深拷贝的列表也没有受到影响,因为它包含了原始内部对象的新副本。

2.5 count()函数

在Python中,list 类型有一个 count() 方法,用于统计列表中某个元素出现的次数。这个方法接受一个参数,即要统计的元素,并返回该元素在列表中出现的次数。

下面是一个使用 count() 方法的例子:

# 创建一个包含元素的列表
my_list = [1, 2, 3, 2, 2, 4, 5, 2]# 统计元素2在列表中出现的次数
count_of_two = my_list.count(2)# 打印结果
print("The count of 2 in the list is:", count_of_two)  # 输出: The count of 2 in the list is: 4

在这个例子中,my_list 包含8个元素,其中元素2出现了4次。调用 my_list.count(2) 返回了4,即元素2在列表中出现的次数。

count() 方法只会统计列表中直接包含的元素,不会递归地检查嵌套的对象(如列表中的列表)。如果列表中包含嵌套列表,并且你想要统计某个元素在整个嵌套列表结构中出现的次数,你需要实现一个递归函数来遍历所有嵌套列表。

需要注意的是,count() 方法对于列表中的元素进行直接比较,因此如果列表中的元素是不可哈希的类型(如列表或字典),那么它们不能被用作 count() 方法的参数,因为这样的元素不能出现在哈希表中,而 count() 方法需要利用哈希表来快速查找元素。

此外,count() 方法的时间复杂度通常是O(n),其中n是列表的长度,因为它需要遍历整个列表来统计元素的出现次数。

2.6 del

在Python中,del语句可以用来删除列表中的元素或整个列表。当你想删除列表中的某个元素时,你可以使用del语句并指定该元素的索引。如果你想删除整个列表,你可以使用del语句并指定列表的变量名。

下面是使用del语句删除列表元素的例子:

# 创建一个包含元素的列表
my_list = [1, 2, 3, 4, 5]# 打印原始列表
print("Original list:", my_list)  # 输出: Original list: [1, 2, 3, 4, 5]# 使用del语句删除索引为2的元素(即数字3)
del my_list[2]# 打印删除元素后的列表
print("List after deleting element at index 2:", my_list)  # 输出: List after deleting element at index 2: [1, 2, 4, 5]

在这个例子中,del my_list[2]删除了my_list中索引为2的元素,即数字3。

如果你想删除整个列表,可以这样做:

# 创建一个包含元素的列表
my_list = [1, 2, 3, 4, 5]# 打印原始列表
print("Original list:", my_list)  # 输出: Original list: [1, 2, 3, 4, 5]# 使用del语句删除整个列表
del my_list# 尝试访问已删除的列表会引发错误
# print(my_list)  # NameError: name 'my_list' is not defined

在这个例子中,del my_list删除了整个列表对象,包括其变量名my_list。此后,尝试访问my_list将会导致NameError,因为该变量已经不存在了。

请注意,使用del语句删除列表元素或整个列表时,必须确保你正在删除的是正确的元素或列表,因为删除操作是不可逆的。如果你想保留原始列表并创建一个没有特定元素的新列表,你应该使用list.remove(element)方法(用于删除第一个匹配的元素)或list.copy()与列表推导式(用于创建新列表,不包含某些元素)。

2.7 enumerate()函数

在Python中,enumerate()是一个内置函数,它用于遍历一个可迭代对象(如列表、元组或字符串)的元素,并同时返回每个元素的索引和值。这对于在循环中同时需要索引和元素值的情况非常有用。

enumerate()函数的基本语法是:

enumerate(iterable, start=0)

其中,iterable是一个可迭代对象,start是一个可选参数,表示计数开始的索引值,默认为0。

下面是一个使用enumerate()函数的例子,它遍历一个列表并打印出每个元素的索引和值:

# 创建一个列表
my_list = ['apple', 'banana', 'cherry']# 使用enumerate()遍历列表
for index, value in enumerate(my_list):print(f"Index: {index}, Value: {value}")

输出结果将会是:

Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry

在上面的例子中,enumerate(my_list)返回一个枚举对象,该对象在每次迭代时产生一个包含索引和值的元组。for循环则解包这个元组,将索引赋值给index变量,将值赋值给value变量。

通过enumerate()函数,你可以方便地在循环中同时获取到元素的索引和值,而不需要使用额外的计数器或索引变量。

2.8 extend()函数

在Python中,list.extend()是一个方法,用于将一个可迭代对象(如列表、元组或字符串)的元素添加到现有列表的末尾。与list.append()方法不同,extend()会将可迭代对象中的每个元素单独添加到列表中,而不是将整个可迭代对象作为单个元素添加。

以下是list.extend()方法的语法:

list.extend(iterable)

其中,iterable是一个可迭代对象,可以是列表、元组、字符串等。

下面是一个使用extend()方法的例子:

# 创建一个列表
my_list = [1, 2, 3]# 创建另一个可迭代对象
another_list = [4, 5, 6]# 使用extend()将another_list的元素添加到my_list中
my_list.extend(another_list)# 打印修改后的列表
print(my_list)  # 输出: [1, 2, 3, 4, 5, 6]

在这个例子中,extend()方法将another_list中的每个元素(4、5、6)添加到my_list的末尾。

如果尝试使用append()方法将another_list添加到my_list,结果将会有所不同:

# 使用append()将another_list作为一个元素添加到my_list中
my_list.append(another_list)# 打印修改后的列表
print(my_list)  # 输出: [1, 2, 3, [4, 5, 6]]

在这个例子中,append()方法将整个another_list作为一个元素添加到了my_list的末尾,而不是将another_list中的元素添加到my_list中。

extend()方法在处理列表合并时非常有用,因为它可以简洁地将多个列表的元素合并到一个列表中。

2.9 index()函数

在Python中,list.index()是一个列表方法,用于查找列表中某个元素的第一个匹配项的索引。如果元素存在于列表中,index()方法返回该元素的最低索引(即它首次出现的位置)。如果元素不在列表中,index()方法将引发一个ValueError异常。

以下是list.index()方法的基本语法:

list.index(value, [start, [stop]])
  • value:需要查找的元素值。
  • start(可选):开始搜索的索引位置。如果指定了该参数,搜索将从该索引开始,直到列表的末尾。
  • stop(可选):停止搜索的索引位置。搜索将在该索引之前结束。

下面是一个使用index()方法的例子:

# 创建一个列表
my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']# 使用index()查找'cherry'的索引
cherry_index = my_list.index('cherry')# 打印结果
print(f"The index of 'cherry' is: {cherry_index}")  # 输出: The index of 'cherry' is: 2# 尝试查找不存在的元素
try:nonexistent_index = my_list.index('fig')
except ValueError as e:print(f"An error occurred: {e}")  # 输出: An error occurred: 'fig' is not in list

在上面的例子中,my_list.index(‘cherry’)返回2,因为’cherry’是列表中第三个元素(索引从0开始)。当我们尝试查找一个不存在的元素(如’fig’)时,index()方法会抛出一个ValueError异常,因此我们需要使用try和except块来捕获并处理这个异常。

如果你想从列表的特定部分开始搜索,你可以使用start和stop参数。例如,要查找从索引1开始到索引4(不包括4)的元素’banana’的索引,你可以这样做:

banana_index = my_list.index('banana', 1, 4)
print(f"The index of 'banana' between indices 1 and 4 (exclusive) is: {banana_index}")  # 输出: The index of 'banana' between indices 1 and 4 (exclusive) is: 1

在这个例子中,尽管’banana’实际上在索引0的位置,但由于我们指定了搜索范围,所以返回的是在该范围内的第一个匹配项的索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】猛猛干11道链表OJ(未完待续ing)

前言知识点 链表的调试技巧 int main() {struct ListNode* n1(struct ListNode*)malloc(sizeof(struct ListNode));assert(n1);struct ListNode* n2(struct ListNode*)malloc(sizeof(struct ListNode));assert(n2);struct ListNode* n3(struct ListNode*)malloc(sizeof(struc…

蓝桥杯 2023 省B 飞机降落

首先&#xff0c;这题要求的数据量比较少&#xff0c;我们可以考虑考虑暴力解法。 这题可能难在很多情况的考虑&#xff0c;比如说&#xff1a; 现在时间是10&#xff0c;有个飞机20才到&#xff0c;我们是可以干等10分钟。 #include <iostream> #include <…

对话奇酷网络董事长吴渔夫: 迟到的游戏公司会被AI浪潮卷入海底

“ 迟到的游戏公司会被无形的 AI 浪潮卷入海底。” 整理 | 梦婕 编辑 | 云舒 出品&#xff5c;极新 2024年3月4日&#xff0c;在极新与吴渔夫的对话中&#xff0c;吴渔夫多次呼吁“全力拥抱AI”。在这场AI浪潮中&#xff0c;作为中国网游的先锋&#xff0c;他带着 25 年“中…

Flutter项目组件模块化开发的实践与搭建

在Flutter应用程序的开发中&#xff0c;组件模块化是一种非常重要的开发方式&#xff0c;它可以提高代码的可维护性、复用性和扩展性。本文将介绍如何在Flutter项目中搭建组件模块化开发的框架&#xff0c;并给出实际的实践示例。 1. 为什么需要组件模块化开发&#xff1f; 在…

【web前端】<meta>标签

meta元素可以提供有关页面的元信息&#xff08;meta-information&#xff09; meta标签位于文档的头部&#xff0c;是空元素 meta元素的属性 属性值描述http-equiv expires refresh X-UA-compatible 定义HTTP协议的头部元信息名称。其中&#xff0c;expires设置网页在缓存区的…

记录一下目前为止的算法成长

每日笔记 复习曲线 间隔1天、3天、7天、15天、30天&#xff0c;然后以一个月为周期复习 2023. 12. 24 一定要每天早中晚都要复习一下 早中午每段一两道, 而且一定要是同一个类型, 不然刷起来都没有意义 11.29 开始向着面试刷题跟进! 每天刷4题左右 ,一周之内一定要是统一类…

c语言:最大公约数

最大公约数 任务描述 最大公约数&#xff08;也称最大公因数、最大公因子&#xff09;&#xff0c;指两个或多个整数共有约数中最大的一个。 编程输入两个正整数&#xff0c;输出它们的最大公约数。 输入示例 36 24输出示例 12代码 方法1&#xff1a;辗转相除法 #inclu…

笔记本8代i5和台式机12代i5的性能比较

一、 台式机12代i5 二、笔记本8代i5 在多核性能上差不多是2.4倍&#xff0c;所以跑大一点的Matlab或者别的程序&#xff0c;用台式机&#xff0c;后边实验室能用上超多核服务器另说。

uniapp,导航栏(切换项)有多项,溢出采取左滑右滑的形式展示

一、实现效果 当有多项的导航&#xff0c;或者说切换项&#xff0c;超出页面的宽度&#xff0c;我们采取可滑动的方式比较好一些&#xff01;并且在页面右边加个遮罩&#xff0c;模拟最右边有渐变效果&#xff01; 二、实现代码 html代码&#xff1a; <!-- 头部导航栏 --…

鸿蒙Harmony应用开发—ArkTS-转场动画(共享元素转场)

当路由进行切换时&#xff0c;可以通过设置组件的 sharedTransition 属性将该元素标记为共享元素并设置对应的共享元素转场动效。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 属性 名称参数参数描述…

F. Microcycle(dfs 搜寻路径 + 并查集)

解析&#xff1a; 本题的意思是&#xff0c;求一个环的最小的那条边。 并且输出其这个环的点。 我们可以利用并查集&#xff0c;进行确定其是否有环路。在将所用的边从大到小排序。 利用 vector容器&#xff0c;pop_back() 和 push的特性。 起点为 u终点为 v寻找路径。 代…

投简历没回复?9位DBA公众号集结,快上车!

&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; 中国DBA联盟(ACD…

机试旧题新讲一

最近在准备学校复试&#xff0c;刷一些老题旧题&#xff0c;在N诺oj和牛客网上都有提交。今天就总结部分题目&#xff0c;只写我觉得值得写的&#xff08;当然还有一些我不会写&#xff0c;不想去学了&#xff09;。 1、二进制数 输入输出格式 输入描述: 每行有一个数字n&#…

探索顺序表操作:从理论到实践

### 探索顺序表操作&#xff1a;从理论到实践 顺序表是数据结构中一种基础而重要的线性表&#xff0c;它通过一段连续的存储空间顺序存储数据元素。与链表相比&#xff0c;顺序表的优势在于支持随机访问&#xff0c;使得数据的检索效率非常高。然而&#xff0c;由于数据存储的…

寄快递很麻烦怎么办?无脑方法教会你便宜寄快递!快冲!

现在我们每天都会去寄快递&#xff0c;不仅寄大件还会发物流&#xff0c;但是我们真的了解快递的价格吗&#xff1f;寄快递必须拿到快递驿站吗&#xff1f;去菜鸟驿站寄快递会给我们便宜吗&#xff1f;有没有什么便宜的寄快递的方法呢&#xff1f;驿站会有包装快递的包装袋吗&a…

Wireshare捕获接口中没有本地连接

1. 查看npf服务是否启动 服务名无效&#xff0c;需要安转WinPcap 2. 勾选Npcap Packet Driver (NPCAP) 3. 重新启动Wireshark 重新启动Wireshark后&#xff0c;本地连接有了

Linux下使用Pycharm

1.下载pycharm 访问Pycharm官网地址https://www.jetbrains.com/pycharm/download/#sectionlinux&#xff0c;找到PyCharm的下载页面。接着&#xff0c;根据个人需求&#xff0c;选择适宜的操作系统及版本&#xff0c;下载官方提供的pycharm.tar.gz文件进行安装&#xff0c;安装…

SpringCloud从入门到精通速成(一)

文章目录 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求&#xff1a;2.3.2.注册RestTemplate2.3.3.实…

学生信息管理系统--修改信息(非常详细的修改,更新,撤销,删除逻辑)

目录 概述修改包括的操作修改在每个模块中的应用 详解修改与更新取消删除 特殊概念数据集游标 总结 概述 学生信息管理系统&#xff0c;功能相对简单且代码重复性高&#xff0c;应该采用复用的思想来减少代码的冗余和提高代码的可维护性。然而&#xff0c;对于基础入门项目来说…

NVM使用教程

文章目录 ⭐️写在前面的话⭐️1、卸载已经安装的node2、卸载nvm3、安装nvm4、配置路径以及下载源5、使用nvm下载node6、nvm常用命令7、全局安装npm、cnpm8、使用淘宝镜像cnpm9、配置全局的node仓库&#x1f680; 先看后赞&#xff0c;养成习惯&#xff01;&#x1f680;&#…