南昌专门做网站,用jsp做的网站,做网站需要雇什么人,wordpress 4.5.3 漏洞Python中的数据结构#xff08;容器#xff09;之列表#xff08;list#xff09;
容器用于存储多个数据#xff0c;是基础语法的核心组成#xff0c;常用的有 4 种#xff1a;
列表#xff08;list#xff09;—— 有序、可变、可重复字典#xff08;dict#xff0…Python中的数据结构容器之列表list容器用于存储多个数据是基础语法的核心组成常用的有 4 种列表list—— 有序、可变、可重复字典dict—— 键值对、无序、键唯一元组tuple—— 有序、不可变、可重复集合set—— 无序、无重复、可交并差列表list列表是 Python 中最常用的数据结构之一它是一种有序、可变可修改的集合可以存储任意类型的元素。列表的本质是一个可以动态扩容的动态数组,在内存中是连续的所以列表是一个支持随机访问并且可以改变大小的数据结构其性质和C中的vector有异曲同工之妙列表在内存中会以以下方式进行存储核心特点✅有序每个元素有唯一索引从 0 开始可通过索引精准访问✅可变可随时增、删、改元素区别于元组 tuple✅可重复允许存储重复元素✅多类型可同时存储整数、字符串、列表等不同类型数据。列表用方括号[]包裹元素之间用逗号,分隔可存储不同类型的数据也可创建空列表。# 1. 空列表empty_list[]print(empty_list)# 输出[]# 2. 普通列表同类型元素num_list[1,2,3,4,5]# 整数列表str_list[Python,Java,C]# 字符串列表# 3. 混合类型列表不同类型元素mix_list[1,hello,3.14,True]print(mix_list)# 4. 嵌套列表列表里包含列表二维列表nested_list[[1,2],[3,4],[5,6]]# 类似矩阵print(nested_list)嵌套列表其逻辑结构如下列表的基础操作 - 增删改查1、查通过索引或切片访问索引是元素的 “位置编号”从 0 开始支持负数索引-1 表示最后一个元素索引时注意列表长度如果访问了不存在的元素会导致 IndexError索引访问fruits[苹果,香蕉,橙子,葡萄]# 正向索引从0开始print(fruits[0])# 输出苹果第一个元素print(fruits[2])# 输出橙子第三个元素# 反向索引从-1开始print(fruits[-1])# 输出葡萄最后一个元素print(fruits[-3])# 输出香蕉倒数第三个元素# 嵌套列表访问先查外层再查内层matrix[[1,2],[3,4]]print(matrix[1][0])# 输出3外层第2个列表的第1个元素切片访问语法列表[start:end:step]start起始索引默认 0包含end结束索引默认列表长度不包含step步长默认 1负数表示反向切片nums[0,1,2,3,4,5,6,7,8,9]# 基础切片取索引1到4不包含4print(nums[1:4])# 输出[1,2,3]# 省略start从开头到索引5不包含5print(nums[:5])# 输出[0,1,2,3,4]# 省略end从索引5到末尾print(nums[5:])# 输出[5,6,7,8,9]# 步长为2每隔1个取一个print(nums[0:10:2])# 输出[0,2,4,6,8]# 反向切片反转列表print(nums[::-1])# 输出[9,8,7,6,5,4,3,2,1,0]2、改通过索引直接赋值列表是可变对象修改会直接改变原列表。fruits[苹果,香蕉,橙子,葡萄]fruits[1]芒果# 将索引1的元素改为“芒果”print(fruits)# 嵌套列表修改matrix[[1,2],[3,4]]matrix[0][1]10print(matrix)3、增常用 3 种方法按需选择方法作用示例append()末尾添加单个元素fruits.append(葡萄)insert()指定索引位置添加元素fruits.insert(1, 梨)extend()末尾合并另一个可迭代对象fruits.extend([草莓, 荔枝])append 与 extend 区别append()加单个元素包括列表extend()合并可迭代对象。fruits[苹果,香蕉]# append末尾加单个元素fruits.append(橙子)print(fruits)# 输出[苹果, 香蕉, 橙子]# insert索引1的位置加“梨”fruits.insert(1,梨)print(fruits)# 输出[苹果, 梨, 香蕉, 橙子]# extend合并另一个列表fruits.extend([葡萄,草莓])print(fruits)# 输出[苹果, 梨, 香蕉, 橙子, 葡萄, 草莓]# 注意append加列表会把整个列表作为单个元素fruits.append([芒果,荔枝])print(fruits)# 输出[...,草莓, [芒果, 荔枝]]如果是在列表的开头或者中间进行插入时会时后续的所有元素都往后移动4、删常用 4 种方法各有适用场景方法作用示例del按索引删除可删单个 / 切片无返回值del fruits[1]/del fruits[1:3]pop()按索引删除返回被删元素默认删末尾fruits.pop()/fruits.pop(1)remove()按值删除删第一个匹配项fruits.remove(香蕉)clear()清空列表所有元素fruits.clear()remove 只删第一个匹配项列表中有多个相同元素时remove()仅删除第一个fruits[苹果,梨,香蕉,橙子,香蕉]# del删除索引1的元素delfruits[1]print(fruits)# 输出[苹果, 香蕉, 橙子, 香蕉]# pop删除末尾元素返回“香蕉”last_fruitfruits.pop()print(last_fruit)# 输出香蕉print(fruits)# 输出[苹果, 香蕉, 橙子]# remove删除第一个“香蕉”fruits.remove(香蕉)print(fruits)# 输出[苹果, 橙子]# clear清空列表fruits.clear()print(fruits)# 输出[]常用内置方法方法作用示例len()统计列表长度元素个数len([1,2,3])→ 3count()统计指定元素出现次数[1,2,2,3].count(2)→ 2index()查找元素第一次出现的索引找不到报错[1,2,3].index(2)→ 1sort()原地排序修改原列表默认升序nums.sort()/nums.sort(reverseTrue)sorted()返回新的排序列表不修改原列表new_nums sorted(nums)reverse()原地反转列表修改原列表nums.reverse()sort 是原地排序sort()会修改原列表无返回值不要写nums nums.sort()# 1. len()长度nums[1,2,3,4,5]print(len(nums))# 输出5# 2. count()统计次数nums[1,2,2,3,2,4]print(nums.count(2))# 输出3# 3. index()查找索引print(nums.index(3))# 输出3# 4. sort()原地排序nums[3,1,4,2,5]nums.sort()# 升序print(nums)# 输出[1,2,3,4,5]nums.sort(reverseTrue)# 降序print(nums)# 输出[5,4,3,2,1]# 5. sorted()返回新列表原列表不变nums[3,1,4,2]new_numssorted(nums)print(nums)# 输出[3,1,4,2]原列表不变print(new_nums)# 输出[1,2,3,4]# 6. reverse()反转nums[1,2,3]nums.reverse()print(nums)# 输出[3,2,1]列表进阶用法遍历用for循环遍历列表元素可直接遍历元素也可遍历索引fruits[苹果,香蕉,橙子]# 方式1直接遍历元素推荐forfruitinfruits:print(f我喜欢吃{fruit})# 方式2遍历索引需要修改元素时用foriinrange(len(fruits)):print(f索引{i}的元素是{fruits[i]})# 方式3同时遍历索引和元素enumerateforidx,fruitinenumerate(fruits):print(f索引{idx}{fruit})列表推导式Python 特有的高效语法用一行代码创建列表替代 “循环 append”新手也能快速上手。语法[表达式 for 变量 in 可迭代对象 if 条件]# 创建1-10的列表替代forappendnums[iforiinrange(1,11)]print(nums)# 输出[1,2,3,4,5,6,7,8,9,10]# 创建1-10的偶数列表加条件even_nums[iforiinrange(1,11)ifi%20]print(even_nums)# 输出[2,4,6,8,10]# 将列表元素转为大写fruits[apple,banana,orange]upper_fruits[fruit.upper()forfruitinfruits]print(upper_fruits)# 输出[APPLE, BANANA, ORANGE]嵌套列表列表里包含列表常用于表示矩阵、表格等结构化数据# 二维列表3行2列matrix[[1,2],[3,4],[5,6]]# 遍历嵌套列表forrowinmatrix:fornuminrow:print(num,end )print()# 换行# 输出# 1 2# 3 4# 5 6# 列表推导式处理嵌套列表扁平化flat_matrix[numforrowinmatrixfornuminrow]print(flat_matrix)# 输出[1,2,3,4,5,6]列表操作的时间复杂度分析操作平均时间复杂度最坏情况说明索引访问lst[i]O(1)O(1)直接内存偏移追加append()O(1)O(n)分摊O(1)扩容时O(n)插入insert(0, x)O(n)O(n)需要移动所有元素删除pop()O(1)O(1)移除最后一个元素删除pop(0)O(n)O(n)需要移动所有元素查找inO(n)O(n)线性搜索切片lst[a:b]O(k)O(k)k b-a列表小练习使用列表制作一个待办清单小程序功能如下查看所有待办事项列表遍历 / 查添加新的待办事项列表增append修改指定待办事项列表改索引赋值删除指定待办事项列表删pop退出程序可以先自己思考一下怎么实现。如果你熟悉数据结构也可以考虑使用列表实现队列、栈等数据结构实现代码如下仅作参考# 基于列表的待办清单小程序# 初始化空列表存储待办事项todo_list[]print( 欢迎使用待办清单小程序 )print(功能说明)print(1 - 查看所有待办事项)print(2 - 添加待办事项)print(3 - 修改待办事项)print(4 - 删除待办事项)print(5 - 退出程序)print(\n)# 主循环保持程序运行直到用户选择退出whileTrue:# 获取用户选择的功能try:choiceint(input(请输入你要执行的功能编号1-5))exceptValueError:print(❌ 输入错误请输入1-5之间的数字。\n)continue# 功能1查看所有待办事项ifchoice1:print(\n----- 你的待办清单 -----)ifnottodo_list:# 判断列表是否为空print(暂无待办事项快去添加吧)else:# 遍历列表显示索引和待办事项enumerate获取索引元素foridx,iteminenumerate(todo_list,start1):print(f{idx}.{item})print(------------------------\n)# 功能2添加待办事项elifchoice2:iteminput(请输入要添加的待办事项).strip()ifnotitem:# 防止输入空字符串print(❌ 待办事项不能为空\n)continuetodo_list.append(item)# 列表末尾添加元素print(f✅ 已添加待办事项{item}\n)# 功能3修改待办事项elifchoice3:ifnottodo_list:print(❌ 暂无待办事项无法修改\n)continue# 先显示当前待办事项方便用户选择要修改的项print(\n----- 当前待办清单 -----)foridx,iteminenumerate(todo_list,start1):print(f{idx}.{item})# 获取要修改的序号并转换为列表索引序号-1try:modify_idxint(input(请输入要修改的待办事项序号))-1ifmodify_idx0ormodify_idxlen(todo_list):print(❌ 序号不存在\n)continueexceptValueError:print(❌ 输入错误请输入数字序号。\n)continue# 输入新的待办事项并修改new_iteminput(请输入修改后的待办事项).strip()ifnotnew_item:print(❌ 待办事项不能为空\n)continueold_itemtodo_list[modify_idx]# 保存原内容方便提示todo_list[modify_idx]new_item# 列表索引赋值修改元素print(f✅ 已将「{old_item}」修改为「{new_item}」\n)# 功能4删除待办事项elifchoice4:ifnottodo_list:print(❌ 暂无待办事项无法删除\n)continue# 先显示当前待办事项print(\n----- 当前待办清单 -----)foridx,iteminenumerate(todo_list,start1):print(f{idx}.{item})# 获取要删除的序号try:del_idxint(input(请输入要删除的待办事项序号))-1ifdel_idx0ordel_idxlen(todo_list):print(❌ 序号不存在\n)continueexceptValueError:print(❌ 输入错误请输入数字序号。\n)continue# 删除指定索引的元素并提示del_itemtodo_list.pop(del_idx)# pop删除并返回被删元素print(f✅ 已删除待办事项{del_item}\n)# 功能5退出程序elifchoice5:print( 感谢使用待办清单小程序再见)break# 输入无效编号else:print(❌ 功能编号错误请输入1-5之间的数字。\n)运行效果如下欢迎使用待办清单小程序功能说明1- 查看所有待办事项2- 添加待办事项3- 修改待办事项4- 删除待办事项5- 退出程序请输入你要执行的功能编号1-51 ----- 你的待办清单 ----- 暂无待办事项快去添加吧 ------------------------ 请输入你要执行的功能编号1-52 请输入要添加的待办事项写代码 ✅ 已添加待办事项写代码 请输入你要执行的功能编号1-51 ----- 你的待办清单 -----1. 写代码 ------------------------ 请输入你要执行的功能编号1-52 请输入要添加的待办事项写笔记 ✅ 已添加待办事项写笔记 请输入你要执行的功能编号1-51 ----- 你的待办清单 -----1. 写代码2. 写笔记 ------------------------ 请输入你要执行的功能编号1-53 ----- 当前待办清单 -----1. 写代码2. 写笔记 请输入要修改的待办事项序号1 请输入修改后的待办事项写代码已完成 ✅ 已将「写代码」修改为「写代码已完成」 请输入你要执行的功能编号1-51 ----- 你的待办清单 -----1. 写代码已完成2. 写笔记 ------------------------ 请输入你要执行的功能编号1-54 ----- 当前待办清单 -----1. 写代码已完成2. 写笔记 请输入要删除的待办事项序号2 ✅ 已删除待办事项写笔记 请输入你要执行的功能编号1-51 ----- 你的待办清单 -----1. 写代码已完成 ------------------------ 请输入你要执行的功能编号1-55 感谢使用待办清单小程序再见 进程已结束退出代码为0