【100天精通python】Day7:数据结构_列表 List的创建、删除、访问、遍历、统计、排序、推导等使用

news2024/11/27 18:43:50

目录

1 列表的创建

2 列表的删除

3 访问列表元素

4 遍历列表

5 添加修改删除列表元素

6 对列表进行统计和计算

7 对列表进行排序

8 列表推导式

9 多维列表


  

        在Python中,列表是一种有序的可变数据类型,用于存储一组元素。

        列表使用方括号“[] ”来定义,其中的元素可以是任意数据类型,包括数字、字符串、布尔值、其他列表等。

        列表中的元素之间用逗号 “, ”分隔。

1 列表的创建

1.1 创建空列表

empty_list = []

1.2 创建包含元素的列表

numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "orange"]
mixed_data = [1, "hello", True, 3.14]

1.3 使用list()函数创建列表

numbers = list(range(1, 6))  # 创建一个包含1到5的整数列表

1.4 使用列表解析(List Comprehension)创建列表

squares = [x**2 for x in range(1, 6)]  # 创建一个包含1到5的平方的列表,即[1, 4, 9, 16, 25]

1.5 创建嵌套列表 

nested_list = [[1, 2, 3], ["a", "b", "c"], [True, False]]

注意:列表中的元素可以是任意数据类型,而且列表长度可以根据需要动态调整,因为列表是可变的。可以通过索引来访问列表中的元素,也可以使用切片来获取子列表。例如:

my_list = [1, 2, 3, 4, 5]

# 访问列表中的元素
print(my_list[0])  # 输出:1
print(my_list[2])  # 输出:3

# 使用切片获取子列表
subset = my_list[1:4]  # subset变量将包含列表中索引为1到3的元素,即[2, 3, 4]

2 列表的删除

2.1 清空列表所有元素

my_list = [1, 2, 3, 4, 5]

my_list.clear()  # 清空my_list,即变为一个空列表:[]

2.2 删除整个列表 

my_list = [1, 2, 3, 4, 5]

del my_list  # 删除整个列表

 请注意,上述操作是对原始列表进行的更改。如果需要保留原始列表并创建一个新的列表,可以使用切片或列表解析来实现。例如:

my_list = [1, 2, 3, 4, 5]

new_list = my_list[:2] + my_list[3:]  # 创建一个新列表,删除索引为2的元素,即[1, 2, 4, 5]

3 访问列表元素

要访问列表元素,可以使用索引或切片。

3.1 使用索引访问单个元素

        列表中的元素按照从左到右的顺序分配索引,从0开始计数。可以使用索引来访问列表中的单个元素。

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

first_element = my_list[0]  # 获取第一个元素,索引为0
second_element = my_list[1]  # 获取第二个元素,索引为1
third_element = my_list[2]  # 获取第三个元素,索引为2

print(first_element)  # 输出:10
print(second_element)  # 输出:20
print(third_element)  # 输出:30

3.2 使用负数索引访问倒数元素

        使用负数索引来访问列表中的倒数元素,即从列表末尾开始计数

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

last_element = my_list[-1]  # 获取最后一个元素,索引为-1
second_last_element = my_list[-2]  # 获取倒数第二个元素,索引为-2

print(last_element)  # 输出:50
print(second_last_element)  # 输出:40

3.3 使用切片访问多个元素

        切片允许获取列表中的多个元素,可以指定起始索引和结束索引来创建一个切片。

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

slice_of_list = my_list[1:4]  # 获取索引1到索引3的元素,不包括索引4
print(slice_of_list)  # 输出:[20, 30, 40]

4 遍历列表

        遍历列表是指按顺序访问列表中的每个元素,以执行相同或类似的操作。在Python中,有几种方法可以遍历列表。

4.1 使用for循环遍历列表元素

        使用for循环是最常见和简单的遍历列表的方法。它可以依次获取列表中的每个元素,并对每个元素执行指定的操作。

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

for item in my_list:
    print(item)  # 输出列表中的每个元素,依次打印:10 20 30 40 50

4.2 使用while循环和索引遍历列表元素

        使用while循环和索引可以手动遍历列表中的元素。在这种情况下,需要使用一个索引变量来控制循环。

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

index = 0
while index < len(my_list):
    print(my_list[index])  # 输出列表中的每个元素,依次打印:10 20 30 40 50
    index += 1

 4.3  使用enumerate()函数同时获取索引和元素

        enumerate()函数可以在遍历列表时同时获取元素和对应的索引。

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

for index, item in enumerate(my_list):
    print(f"Index: {index}, Element: {item}")  # 输出:Index: 0, Element: 10  Index: 1, Element: 20 ...

5 添加修改删除列表元素

        在Python中,可以通过索引来添加和修改列表元素。

5.1 添加元素

        a) 使用append()方法:append()方法用于在列表的末尾添加一个元素。

my_list = [10, 20, 30]

my_list.append(40)
print(my_list)  # 输出:[10, 20, 30, 40]

# 也可以一次性添加多个元素,通过使用extend()方法:
my_list.extend([50, 60])
print(my_list)  # 输出:[10, 20, 30, 40, 50, 60]

        b) 使用insert()方法:insert()方法用于在指定索引处插入一个元素。 

my_list = [10, 20, 30]

my_list.insert(1, 15)  # 在索引1处插入元素15
print(my_list)  # 输出:[10, 15, 20, 30]

5.2 修改元素

        通过索引访问列表中的元素,并用新的值替换它,即可修改列表元素。

my_list = [10, 20, 30]

my_list[1] = 25  # 将索引1处的元素20修改为25
print(my_list)  # 输出:[10, 25, 30]

 5.3 删除元素

 5.3.1 使用del关键字删除列表中的元素

my_list = [1, 2, 3, 4, 5]

del my_list[2]  # 删除索引为2的元素,此时my_list变为[1, 2, 4, 5]

5.3.2 使用remove()方法删除特定值的元素

my_list = [1, 2, 3, 4, 5]

my_list.remove(3)  # 删除值为3的元素,此时my_list变为[1, 2, 4, 5]

5.3.3 使用pop()方法删除指定索引的元素并返回该元素

my_list = [1, 2, 3, 4, 5]

removed_element = my_list.pop(2)  # 删除索引为2的元素(值为3)并将其赋值给removed_element,此时my_list变为[1, 2, 4, 5]

5.3.4 使用切片来删除多个元素

my_list = [1, 2, 3, 4, 5]

my_list = my_list[:2] + my_list[3:]  # 删除索引为2的元素(值为3),此时my_list变为[1, 2, 4, 5]

6 对列表进行统计和计算

        对列表进行统计和计算,例如求和、找最大值和最小值、计算平均值等。以下是一些常用的列表统计和计算方法:

6.1 求和:

        使用sum()函数计算列表中所有元素的和。

my_list = [1, 2, 3, 4, 5]

total_sum = sum(my_list)
print(total_sum)  # 输出:15

 6.2 最大值和最小值:

  • 使用max()函数找到列表中的最大值。
  • 使用min()函数找到列表中的最小值。
  • my_list = [1, 2, 3, 4, 5]
    
    max_value = max(my_list)
    min_value = min(my_list)
    
    print(max_value)  # 输出:5
    print(min_value)  # 输出:1
    

6.3 平均值:

  • 使用sum()len()函数结合起来计算列表的平均值。
  • my_list = [1, 2, 3, 4, 5]
    
    average_value = sum(my_list) / len(my_list)
    print(average_value)  # 输出:3.0
    

6.4 统计元素个数:

  • 使用len()函数获取列表中元素的总数。
my_list = [1, 2, 3, 4, 5]

element_count = len(my_list)
print(element_count)  # 输出:5

7 对列表进行排序

7.1 使用sort()方法:

  sort()方法用于在原地对列表进行排序,即修改原始列表。排序后,原始列表会被改变,而不是创建一个新的排序后的副本。

my_list = [3, 1, 4, 2, 5]
my_list.sort()

print(my_list)  # 输出:[1, 2, 3, 4, 5]

7.2  使用sorted()函数:

   sorted()函数用于对列表进行排序并返回一个新的排序后的列表,而不会修改原始列表。

my_list = [3, 1, 4, 2, 5]
sorted_list = sorted(my_list)

print(sorted_list)  # 输出:[1, 2, 3, 4, 5]
print(my_list)  # 输出:[3, 1, 4, 2, 5](原始列表不变)

7.3  自定义排序规则:

        使用sort()方法或sorted()函数的key参数来指定自定义的排序规则。

# 按绝对值进行排序
my_list = [-3, 1, -4, 2, -5]
my_list.sort(key=abs)

print(my_list)  # 输出:[1, 2, -3, -4, -5]
# 按字符串长度进行排序
my_list = ['apple', 'banana', 'orange', 'kiwi']
my_list.sort(key=len)

print(my_list)  # 输出:['kiwi', 'apple', 'banana', 'orange']

 注意:对于复杂对象的列表,您可以使用key参数指定一个函数,该函数会返回用于排序的关键值。排序将根据这些关键值进行。如果您使用sort()方法进行原地排序,请注意原始列表将被修改,而不会返回新的排序后的列表。而使用sorted()函数则会返回一个新的排序后的列表,而不会修改原始列表。

8 列表推导式

        列表推导式是一种简洁的语法,用于创建新的列表。它允许您通过在一行代码中定义列表的元素,并根据一定的规则对现有的列表或其他可迭代对象进行转换和过滤。

        列表推导式的基本形式是:

[expression for item in iterable if condition]

其中:

  • expression 是一个表达式,用于定义新列表中的元素;
  • item 是来自可迭代对象的每个元素;
  • iterable 是一个可迭代对象,比如列表、元组、集合等;
  • condition 是一个可选的条件,用于过滤可迭代对象中的元素。

下面是一些使用列表推导式的示例:

8.1 创建一个包含1到10的平方的列表:

squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

8.2  过滤出列表中的偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)  # 输出:[2, 4, 6, 8, 10]

 8.3 将字符串列表中的元素转换为大写:

words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words)  # 输出:['HELLO', 'WORLD', 'PYTHON']

8.4 使用条件表达式进行元素转换:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_or_negative = [x**2 if x % 2 == 0 else -x for x in numbers]
print(squared_or_negative)  # 输出:[-1, 4, -3, 16, -5, 36, -7, 64, -9, 100]

9 多维列表

        多维列表是指包含多个嵌套列表的列表,也可以称为二维列表、三维列表等,根据嵌套层数而定。在Python中,您可以使用列表的列表来表示多维列表,其中每个元素是一个子列表。这样的列表可以形成一个类似于矩阵或二维数组的结构,它在数据处理和存储方面非常有用。

        下面是一个二维列表的示例:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

在这个示例中,matrix 是一个包含三个子列表的列表,每个子列表代表一行。您可以使用索引访问多维列表中的元素,例如 matrix[0][1] 将返回 2,表示第一行第二列的元素。

您还可以使用嵌套的列表推导式来创建多维列表。例如,以下代码创建一个3x3的全零二维列表:

rows = 3
cols = 3
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix)  # 输出:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

 同样,您可以创建更高维度的列表,只需在嵌套层级上增加更多的列表。

例如,以下代码创建一个三维列表

x = 3
y = 3
z = 3
three_dimensional_list = [[[0 for _ in range(z)] for _ in range(y)] for _ in range(x)]
print(three_dimensional_list)
# 输出:[[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

多维列表在处理各种数据结构和算法问题时非常有用,特别是在图像处理、矩阵运算和游戏开发等领域。

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

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

相关文章

汇编习题1-100和

.text .globl _start_start:mov r0,#0MOV r1,#0stop:cmp r1,#0x64addcc r1,r1,#0x1addcc r0,r0,r1b stop .end运行结果&#xff1a; 寄存器R0就为16进制的结果

K8S初级入门系列之四-Namespace/ConfigMap/Secret

一、前言 本章节我们继续学习Namespace、ConfigMap、Secret基础概念&#xff0c;了解他们基本用法和操作。NameSpace为命名空间&#xff0c;在同一集群中试下资源隔离。ConfigMap通过key-value的方式实现明文配置数据的保存&#xff0c;Secret与ConfigMap类似&#xff0c;不过是…

Windows下使用rocketMq

1、下载&#xff08;下载zip后解压即可&#xff09; 下载地址&#xff1a;下载 | RocketMQ 2、配置环境变量&#xff08;注意&#xff1a;该目录的下一级是bin&#xff09; 3、启动 在bin目录下使用cmd 分别输入 3.1 启动name server (下图是启动成功的显示&#xff0c;窗口…

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密…

dp算法 力扣978、力扣139、力扣467

目录 一、力扣978978. 最长湍流子数组 - 力扣&#xff08;LeetCode&#xff09; &#xff08;一&#xff09;题目详情 &#xff08;二&#xff09;算法讲解 &#xff08;三&#xff09;代码 二、力扣139139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; &#xff0…

计网学习笔记 wireless mobile networks

无线局域网的组成 无线网络在近些年来一直是个非常流行的东西。现在的移动用户数量已经大大超过了有线用户数量&#xff0c;比例大于5:1。 实现无线网络的挑战性 从有线到无线是网络构建上一个伟大的设想&#xff0c;挑战性主要集中在wireless和mobility两个点上。 这两个是…

Express 框架的基本操作

目录 1、应用生成器 2、基本路由 2.1、在跟路由下配置 GET请求&#xff0c;返回对应相应内容。 2.2、在跟路由下配置 POST请求&#xff0c;返回对应相应内容。 2.3、在跟路由下配置 PUT请求&#xff0c;返回对应相应内容。 2.4、在根路由下配置DELETE请求&#xff0c;返回对…

【剑指offer】学习计划day4

目录 一. 前言 二.数组中重复的数字 a.题目 b.题解分析 c.AC代码 三.在排序数组中查找数字 I a.题目 b.题解分析 c.AC代码 四.0&#xff5e;n-1中缺失的数字 a.题目 b.题解分析 c.AC代码 一. 前言 本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下…

学习系统编程No.32【线程互斥实战】

引言&#xff1a; 北京时间&#xff1a;2023/7/19/15:22&#xff0c;昨天更新完博客&#xff0c;和舍友下了一会棋&#xff0c;快乐就是这么简单&#xff0c;哈哈哈&#xff01;总体来说&#xff0c;摆烂程度得到一定的改善&#xff0c;想要达到以前的水准&#xff0c;需要一定…

分布式 - 消息队列Kafka:Kafka分区常见问题总结

文章目录 01. Kafka 的分区是什么&#xff1f;02. Kafka 为什么需要分区&#xff1f;03. Kafka 分区有什么作用&#xff1f;03. Kafka 为什么使用分区的概念而不是直接使用多个主题呢&#xff1f;04. Kafka 分区的数量有什么限制&#xff1f;05. Kafka 分区的副本有什么作用&am…

[内网渗透]XXE-vulnhub

文章目录 [内网渗透]XXE-vulnhub环境安装信息收集解题步骤总结 [内网渗透]XXE-vulnhub 环境安装 首先在 vulnhub 下载文件&#xff1a; 将其解压为ovf格式&#xff1a; 使用vmware打开&#xff0c;新建一个虚拟机&#xff0c;然后开机&#xff0c;环境就搭好了 信息收集 由于…

【仿写spring】一、通过反射读取带有@RequestMapping与@Controller注解的类并模拟请求路径调用方法

目录 简介思路实践一、自定义注解RequestMapping&#xff0c;Controller二、路径转全限定名方法三、扫描文件夹四、通过反射来寻找有RequestMapping以及Controller的类五、获取对象实例六、通过invoke调用方法 文件结构以及测试结果1、文件结构2、TestController3、测试结果 简…

uniapp 条件编译失败,跑不起来

因为这行代码整个uniapp都跑不起来&#xff0c;谁懂救命。再说uniapp的异常提示也太反人类了<!-- <image :src"require(/ baseListItem.url)" /> -->

Linux进程控制(三)---进程替换+简易shell的实现

目录 execl() execv() execlp() execvp() 如何利用execl执行自己写的C/C可执行程序&#xff1f; 如何利用makefile同时编译两个文件 execle() execvpe() 简单shell的编写 什么是进程替换&#xff1f; 我们之前fork之后&#xff0c;是父子进程各自执行代码的一部分&am…

【人工智能】大模型平台新贵——文心千帆

个人主页&#xff1a;【&#x1f60a;个人主页】 &#x1f31e;热爱编程&#xff0c;热爱生活&#x1f31e; 文章目录 前言大模型平台文心千帆发布会推理能力模型微调 作用 前言 在不久的之前我们曾讨论过在ChatGPT爆火的大环境下&#xff0c;百度推出的“中国版ChatGPT”—文…

深度神经网络基础——深度学习神经网络基础 Tensorflow在深度学习的应用

目录 一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow三、线程与队列与IO操作神经网络基础知识1.简单神经网络2.卷积神经网络卷积层新的激活函数-Relu池化层(Pooling)计算 案例&#xff1a;Mnist手写数字图片识别卷积网络案例 一、二、Tesnsflow入门 & 环境配置…

IDEA无法链接代理The driver has not received any packets from the server.

问题如下: 1、本地部署Proxifier,且设置全局代理,截图如下 代理工具 2、通过Navicat 工具连接该远程数据库,连接正常,截图如下 3、通过IDEA或者Eclipse连接(通过代理),抛连接失败(数据库地址绝对无误),如果把数据库地址改成本地的mysql地址,可以正常连接(不用通过代理)…

mac使用mvn下载node-sass 会Binary download failed, trying source

m1 上使用nvm 以下node的版本可以直接下载&#xff08;Binary download&#xff0c;而不是 trying source&#xff09;而不用切换mac cpu架构 zhiwenwenzhiwenwendeMBP cockpit % nvm install 14.15.5 Downloading and installing node v14.15.5... Downloading https://node…

二十五章:TransUNet:Transformer为医学图像分割提供强大的编码器

0.摘要 医学图像分割是发展医疗系统的重要先决条件&#xff0c;特别是对于疾病诊断和治疗计划。在各种医学图像分割任务中&#xff0c;U型架构&#xff0c;也称为U-Net&#xff0c;已成为事实上的标准&#xff0c;并取得了巨大的成功。然而&#xff0c;由于卷积操作的固有局部性…

Zabbix监控linux主机(agent端)

目录 一、Linux-clinet操作&#xff08;agent&#xff09; 二、源码安装zabbix 三、Zabbix添加linux主机 为agent.zabbix.com添加模板 等待一会 查看效果如下 一、Linux-clinet操作&#xff08;agent&#xff09; [rootlocalhost ~]# ifconfig ens33[rootlocalhost ~]# vim…