第四章 列表(List)元组(Tuple)以及代码格式基础语法及操作

embedded/2024/12/23 21:22:39/
列表(List)&元组(Tuple)基础及操作

在这里插入图片描述

四章 列表、元组以及如何设置代码格式

4.3 创建数值列表
4.3.3 对数字列表执行简单的统计计算

  有几个专门用于处理数字列表的Python函数。比如指出列表中的最大值、最小值、求和以及数量等等。

python">#定义一个空的数值列表
numbers = [];
numbers.append(8);
numbers.append(6);
numbers.append(7);
numbers.append(61);
numbers.append(45);
numbers.append(12);
numbers.append(12)
print(numbers)
#获取列表numbers中的最大值
print(max(numbers));
#获取列表numbers中的最小值
print(min(numbers));
#对列表numbers进行求和
print(sum(numbers));
#获取列表numbers中的元素个数
print(len(numbers));
python">#得到列表的元素
[8, 6, 7, 61, 45, 12, 12]#获取列表中的最大值
61#获取列表numbers中的最小值
6#对列表numbers进行求和
151#获取列表numbers中的元素个数
7
4.3.4 列表解析

  列表解析:将for循环和创建新元素的代码合并为一行,并自动附加新元素。

python">number = [i ** 2 for i in range(8,20,3)]
print(number)#输出结果
[64, 121, 196, 289]

  要使用这种语法,首先指定一个描述性的列表名,如上number;然后指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在上面的事例中,使用range()函数帮我们创建8到20以内且步长为3的一个列表,然后进行平方运算后,得到了四个数,分别是8的平方64、11的平方121、14的平方196以及17的平方289。

  注意:这里的for语句末尾没有冒号。

  要创建自己的列表解析,需要经过一定的练习,但能够熟练地创建常规列表后,你会发现这样做是完全有意义的。当你觉得编写三四行代码来生成一组数值列表有点冗余繁复时,就要往创建列表解析方面着手。

在这里插入图片描述

4.3.5 练习(求和&运行时间)

  练习:

  1、计算1~1000000的总和:创建一个列表,其中包含数字1~1000000,再使用min()和max()核实该列表确实是从1开始,到1000000结束的。另外,对这个列表调用函数sum(),看看Python将一百万个数字相加需要多长时间。

python">import time# 记录开始时间
start_time = time.time()numbers = [i for i in range(1,1000000)];
print(numbers);# 记录结束时间
end_time = time.time()# 计算运行时间
elapsed_time = end_time - start_timeprint(f"运行时间: {elapsed_time}秒")

  运行结果:由于打印出来的结果太多,所以附一张图,如下:

  全部打印出来的运行时间:

在这里插入图片描述

  计算1~1000000总的求和时间:

python">import time
# 记录开始时间
start_time = time.time()
numbers = [i for i in range(1,1000000)];
print(f"计算1~1000000的总和为:{sum(numbers)}。");
# 记录结束时间
end_time = time.time()
# 计算运行时间
elapsed_time = end_time - start_time
print(f"运行时间: {elapsed_time}秒")#输出结果
计算11000000的总和为:499999500000。
运行时间: 0.08270478248596191

在这里插入图片描述

  2、3的倍数:创建一个列表,其中包含3 ~ 30内能被3整除的数,再使用一个for循环,将这个列表中的数打印出来;

python">#创建一个列表,其中包含3 ~ 30内能被3整除的数,再使用一个for循环,将这个列表中的数打印出来;
#使用range函数来随机生成能被3整除的数,只需要加上步长3就可以。
number = [i for i in range(3,31,3)]
print(number)

  输出结果:

python">[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

  3、立方运算:

python">#创建立方运算,且将运算后的结果存入数值列表中
import math 
numbers = [i ** 3 for i in range(1,11)]
print(numbers)
#三次方运算
numberss = [math.pow(i,3) for i in range(1,11)]
print(numberss)
#四次方运算
numbersss = [math.pow(i,4) for i in range(1,11)]
print(numbersss)

  输出结果:

python">#三次方运算(整数)
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]#三次方运算(浮点数)
[1.0, 8.0, 27.0, 64.0, 125.0, 216.0, 343.0, 512.0, 729.0, 1000.0]#四次方运算
[1.0, 16.0, 81.0, 256.0, 625.0, 1296.0, 2401.0, 4096.0, 6561.0, 10000.0]

在这里插入图片描述

4.4 使用列表的一部分

  如何使用以及处理数值列表中的所有元素,在Python中称为切片(slice)

4.4.1 切片

  要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与range()函数一样,Python在到达指定的第二个索引之前的元素时停止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索引分别为0、1和2这三个元素。

python">#定义一个空的列表
color = []
color.append('orange');
color.append('yellow');
color.append('Red');
color.insert(-1,'Purple');
color.insert(int(len(color)/2),'Blue');
color.append('indigo');
color.append('green');
print(f"生成的列表元素为:{color}。\n")
#切片输出,特殊注意是[],中间还需要一个冒号:
print(f"使用切片输出索引为0到4的列表元素:{color[0:4]}。")

  输出结果:

python">生成的列表元素为:['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']。使用切片输出索引为04的列表元素:['orange', 'yellow', 'Blue', 'Purple']

  可以生成列表中的任意子集。

python">#定义一个空的列表
color = []
color.append('orange');
color.append('yellow');
color.append('Red');
color.insert(-1,'Purple');
color.insert(int(len(color)/2),'Blue');
color.append('indigo');
color.append('green');
print(f"生成的列表元素为:{color}。\n")
print(f"没有指定切片器的起始索引:{color[:4]}。\n")#输出结果:
生成的列表元素为:['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']。没有指定切片器的起始索引:['orange', 'yellow', 'Blue', 'Purple']

  由上面输出可知,如果没有指定切片的起始索引,那么Python将自动从列表开头开始提取,一直提取到末尾索引。

  相反,如果没有指定末尾索引,指定了起始索引,那么Python将自动从起始索引一直提取到该列表元素完,程序如下:

python">#定义一个空的列表
color = []
color.append('orange');
color.append('yellow');
color.append('Red');
color.insert(-1,'Purple');
color.insert(int(len(color)/2),'Blue');
color.append('indigo');
color.append('green');
print(f"生成的列表元素为:{color}。\n")
print(f"没有指定切片的末尾索引:{color[3:]}。\n")#输出结果:
生成的列表元素为:['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']。没有指定切片的末尾索引:['Purple', 'Red', 'indigo', 'green']

  无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。由之前章节的知识可以知道,如果负数索引返回与列表末尾有相应距离的元素,因此可以输出列表末尾的任意切片。

python">#定义一个空的列表
color = []
color.append('orange');
color.append('yellow');
color.append('Red');
color.insert(-1,'Purple');
color.insert(int(len(color)/2),'Blue');
color.append('indigo');
color.append('green');
print(f"生成的列表元素为:{color}。\n")
#指定负数索引,比如要输出列表元素的最后四位元素
print(f"没有指定切片的末尾索引:{color[-3:]}。\n")#输出结果:
生成的列表元素为:['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']。没有指定切片的末尾索引:['Purple', 'Red', 'indigo', 'green']

  注意:可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每个多少个元素提取一个。

python">#定义一个空的列表
color = []
color.append('orange');
color.append('yellow');
color.append('Red');
color.insert(-1,'Purple');
color.insert(int(len(color)/2),'Blue');
color.append('indigo');
color.append('green');
print(f"生成的列表元素为:{color}。\n")
print(f"从倒数第四个元素开始数起:{color[-4::2]}。\n")
print(f"从倒数第七个元素开始数起:{color[-7::2]}。\n")#输出结果:
生成的列表元素为:['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']。从倒数第四个元素开始数起:['Purple', 'indigo']。从倒数第七个元素开始数起:['orange', 'Blue', 'Red', 'green']
4.4.2 遍历切片

  如果要遍历列表中的部分元素,可在for循环中使用切片。

python">#遍历切片
message = ['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']
for i in message[2::3]:print(i.title())

  输出结果:

python">Blue
Indigo

  在很多情况下,切片是很有用的。比如在编写游戏时,可以在玩家退出游戏时将其最终得分加入一个列表,然后将该列表按降序排列,再创建一个只包含前三个得分的切片,以获得该玩家的三个最高得分;在处理数据时,可以使用切片来进行批量查询;在编写Web应用程序时,可以使用切片来分页显示信息,并在每页上显示数量合适的信息。

4.4.3 复制列表

  经常需要根据既有列表创建全新的列表,列表复制的工作原理以及复制列表可提过的极大情形。

  要复制列表,可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python创建一个起始于第一个元素、终止于最后一个元素的切片,即复制整个列表。

python">#复制列表
message = ['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']
copy_message = message[::];
#输出复制后的列表
print(copy_message);

  输出结果:

python">['orange', 'yellow', 'Blue', 'Purple', 'Red', 'indigo', 'green']

  首先,创建一个名为message的列表,然后再创建一个名为copy_message的新列表。在不指定任何索引的情况下,从列表message中提取一个切片,从而创建这个列表的副本,再将该副本赋给变量copy_message。然后我们就完全将列表message中的列表元素复制到新列表copy_message中。

4.5 元组

  列表非常适合用于存储在程序运行期间可能发生的数据集。列表是可以修改的,这对于处理网站的用户列表或游戏中的角色列表至关重要。然而有时候需要创建一系列不可修改的元素,元组可满足这种需求。Python中将不可修改的值称为不可变的,而不可变的列表称为元组(tuple)。

4.5.1 定义元组

  元组看起来很像列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就向访问其列表元素一样。

python">#定义一个元组
color = ('orange','red')
#输出元组
print(color[0])
print(color[1])

  输出结果:

python">orange
red

  首先我们定义一个元组color,为此使用了圆括号而不是方括号。接下来,分别打印该元组的各个元素,使用的语法与访问列表元素时使用的语法相同:

  我们尝试来修改元组的值:

python">color[0] = 'purple';
print(color[0]);

  输出结果:

python">Traceback (most recent call last):File "g:\Python\Basic_knowledge\tuple.py", line 8, in <module>color[0] = 'purple';~~~~~^^^
TypeError: 'tuple' object does not support item assignment

  解释:这里的代码【color[0] = ‘purple’】尝试修改第一个元素的值,导致Python返回类型错误的消息。由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值。

  注意:严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:color = (‘green’,)。创建只包含一个元素的元组通常情况下是没有意义的,但自动生成的元组有可能只有一个元素。

4.5.2 遍历元组中的所有值

  像列表一样,也可以使用for循环来遍历元组中的所有值:

python">#定义一个元组
message = (30,20,56,70,45,23,12,5,89,20,15);
#使用for循环对元组进行遍历
for i in message:print(i)

  就像遍历列表时一样,Python返回元组中所有的元素。

python">30
20
56
70
45
23
12
5
89
20
15
4.5.3 修改元组变量

  虽然不能修改元组的元素,但可以给存储元素的变量赋值(即重定义):

python">dimensions = (30,70);
#得到元组中的元组
for i in dimensions:print(f"遍历原定义的元组元素:{i}。");
#重新给元组进行定义
dimensions = (90,200)
#再次遍历定义后的元组
for i in dimensions:print(f"遍历重新定义后的元组元素:{i}。")
python">#输出结果:
遍历原定义的元组元素:30。
遍历原定义的元组元素:70。
遍历重新定义后的元组元素:90。
遍历重新定义后的元组元素:200

在这里插入图片描述

4.6 设置代码格式

  随着编写的程序越来越长,我们需要了解一些代码的格式进而来设置约定。花时间让你编写的代码尽可能易于阅读;让代码易于阅读有助于你掌握程序是做什么的,也可以帮助他人理解你编写的代码。

4.6.1 设置代码格式

  若要提出Python语言修改建议,需要编写Python改进提案(Python Enhancement Proposal,PEP)。PEP 8是最古老的PEP之一,它向Python程序员提供了代码格式设置指南。PEP 8的篇幅很长,但大都与复杂的编码结构相关。

  Python格式设置指南的编写者深知,代码被阅读的次数比编写的次数多。代码编写出来后,调试时你需要阅读它;给程序添加新功能时,需要花很长的时间阅读代码;与其他程序员分享代码时,这些程序员也将阅读它们。

  如果一定要在让代码易于编写和易于阅读之间做出选择,Python程序员几乎总是会选择后者。

4.6.2 缩进(indentation)

  PEP 8建议每级缩进都使用四个空格,这既可提过可读性,又留下足够多的缩进空间;

  在字处理文档中,我们常常会使用制表符而不是空格来缩进。对于字处理文档来说,这样做的效果很好,但混合使用制表符和空格会让Python解释器感到迷惑。每款文本编辑器都提供了一种设置,可将输入的制表符转换为制定数量的空格。你在编写代码时应该使用制表符键,但一定要对编辑器进行设置,使其在文档中插入空格而不是制表符。

  在程序中混合使用制表符和空格可导致极难解决的问题。如果混合使用了制表符和空格,可将文件中所有的制表符转换为空格,大多数编辑器都提供了这样的功能。

4.6.3 行长

  在已经形成的习惯中,很多程序员都建议每行不超过80个字符。PEP 8中有关行长的指南并非不可逾越的红线,有些小组将最大行长设置为99字符。在学习期间,你不用过多地考虑代码的行长,但别忘了,协作编写程序时,大家几乎都遵守PEP 8指南。在大多数编辑器中,都可设置一个视觉标志——通常是一条竖线,让你知道不能越过的界线在什么地方。

4.6.4 空行

  要将程序的不同部分分开,可使用空行。我们应该清楚的一点是,要使用空行来组织程序,不能随便滥用。

  空行不会影响代码的运行,但是会影响代码的可读性。Python解释器根据水平缩进情况解读代码,但不关心垂直间距。

4.6.5 其他格式设置指南

  PEP 8代码格式指南

4.7 小结

  在本章中,你学习了:

  1. 如何高效地处理列表中的元素;
  2. 如何使用for循环遍历列表;
  3. Python如何根据缩进来确定程序的结构以及如何避免一些常见的缩进错误;
  4. 如何创建简单的数字列表,以及可对数字列表执行的一些操作;
  5. 如何通过切片来使用列表的一部分和复制列表。
  6. 元组的基础知识以及操作;
  7. 在代码变得越来越复杂时如何设置格式,使其易于阅读。

  以上的内容,是本人自学Python,写的笔记,如有错误,请留言哦!!!本人会在第一时间及时更正。

行,但是会影响代码的可读性。Python解释器根据水平缩进情况解读代码,但不关心垂直间距。

4.6.5 其他格式设置指南

  PEP 8代码格式指南

4.7 小结

  在本章中,你学习了:

  1. 如何高效地处理列表中的元素;
  2. 如何使用for循环遍历列表;
  3. Python如何根据缩进来确定程序的结构以及如何避免一些常见的缩进错误;
  4. 如何创建简单的数字列表,以及可对数字列表执行的一些操作;
  5. 如何通过切片来使用列表的一部分和复制列表。
  6. 元组的基础知识以及操作;
  7. 在代码变得越来越复杂时如何设置格式,使其易于阅读。

  以上的内容,是本人自学Python,写的笔记,如有错误,请留言哦!!!本人会在第一时间及时更正。如果你觉得有用,请关注我,一起学习Python,一起高薪!!


http://www.ppmy.cn/embedded/148171.html

相关文章

基于python+django的旅游信息网站-旅游景点门票管理系统

标题:基于 PythonDjango 的旅游信息网站-旅游景点门票管理系统 内容:1.摘要 基于 PythonDjango 的旅游信息网站-旅游景点门票管理系统的摘要&#xff1a; 随着旅游业的快速发展&#xff0c;旅游景点门票管理系统的重要性日益凸显。本文旨在设计并实现一个基于 PythonDjango 的…

浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码

Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据&#xff08;包括 Cookies&#xff09;之前必须获得用户的明确同意&#xff1a; GDPR&#xff08;欧盟通用数据保护条例&#xff09; 要求&#xff…

libilibi项目总结(18)FFmpeg 的使用

FFmpeg工具类 import com.easylive.entity.config.AppConfig; import com.easylive.entity.constants.Constants; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.io.File; import java.math.BigDecimal;Component public c…

Docker核心概念总结

容器介绍 Docker 是世界领先的软件容器平台&#xff0c;所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为官方的解释 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

FPGA 16 ,Verilog中的位宽:深入理解与应用

目录 前言 一. 位宽的基本概念 二. 位宽的定义方法

【Mybatis-Plus】使用步骤 条件构造器 分页模型

文章目录 Mybatis-Plus使用步骤条件构造器分页模型 Mybatis-Plus MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 需要快速搭建 CRUD 接口的应用程序。对于已…

【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区

&#x1f5fa;️博客地图 &#x1f4cd;方法一、timedatectl 命令 &#x1f4cd;方法二、手动链接 /etc/localtime &#x1f4cd;方法三、修改时区变量 在 Linux 系统中&#xff0c;可以通过以下3种方式将系统时区修改为 CST&#xff08;中国标准时间&#xff0c;GMT8 或称 …