政安晨:示例演绎Python的列表

列表和你可以用它们做的事:包括索引、切片和对象变动 (变异-Mutation) 。

列表

在Python中,列表表示有序的值序列。以下是如何创建列表的示例:

primes = [2, 3, 5, 7]

我们可以将其他类型的元素放在列表中:

planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']

我们甚至可以创建一个列表的列表:

hands = [['J', 'Q', 'K'],['2', '2', '2'],['6', 'A', 'K'], # (Comma after the last element is optional)
]
# (I could also have written this on one line, but it can get hard to read)
hands = [['J', 'Q', 'K'], ['2', '2', '2'], ['6', 'A', 'K']]

一个列表可以包含不同类型的变量的混合。

my_favourite_things = [32, 'raindrops on roses', help]
# (Yes, Python's help function is *definitely* one of my favourite things)

索引

您可以使用方括号访问单个列表元素。

离太阳最近的行星是哪个?Python使用零-based索引,因此第一个元素的索引为0。

planets[0]

下一个离地球最近的行星是什么?

planets[1]

哪个行星离太阳最远?

列表末尾的元素可以使用负数访问,从-1开始:

planets[-1]

planets[-2]

切片

什么是前三个行星?我们可以使用切片来回答这个问题:

planets[0:3]

planets[:3]表示我们要求取planets列表中从索引0开始,但不包括索引3的元素。

起始索引和结束索引都是可选的。如果省略起始索引,则默认为0。所以我可以将上面的表达式重写为:

planets[:3]

如果我省略了结束索引,那么就是假定它(我省略的结束索引)是列表的长度。

planets[3:]

即上述表达意为“从索引3开始,给我所有的行星”。

当进行切片时,我们也可以使用负数索引。

# All the planets except the first and last
planets[1:-1]

# The last 3 planets
planets[-3:]

更改列表

列表是“可变的”,这意味着它们可以被“原地”修改。

修改列表的一种方法是将其赋值给一个索引或切片表达式。

例如,假设我们想将火星重命名为:

planets[3] = 'Malacandra'
planets

嗯,那确实是个够长的名字。我们通过缩短前三个行星的名字来弥补吧。

planets[:3] = ['Mur', 'Vee', 'Ur']
print(planets)
# That was silly. Let's give them back their old names
planets[:4] = ['Mercury', 'Venus', 'Earth', 'Mars',]

列表函数

Python有几个用于处理列表的有用函数。

len函数返回列表的长度:

# How many planets are there?
len(planets)

sorted函数返回一个已排序的列表版本:

# The planets sorted in alphabetical order
sorted(planets)

sum 做的事情符合你的预期:

primes = [2, 3, 5, 7]
sum(primes)

我们之前使用min和max函数来获取几个参数中的最小值或最大值。但是我们也可以传入一个单独的列表参数。

小插曲:对象

到目前为止,我已经经常使用术语“对象” - 你可能甚至已经读到了在Python中一切都是对象。那是什么意思呢?

简而言之,对象携带一些东西。你使用Python的点语法来访问这些东西。

例如,在Python中,数字携带了一个关联的变量叫做imag表示它们的虚部。(除非你在进行一些非常奇怪的数学运算,否则你可能永远不会需要使用它。)

x = 12
# x is a real number, so its imaginary part is 0.
print(x.imag)
# Here's how to make a complex number, in case you've ever been curious:
c = 12 + 3j
print(c.imag)

注:imaginary 的含义是“虚部”的意思。

一个对象携带的东西也可以包括函数。附加到对象的函数叫做方法。(附加到对象的非函数的东西,比如imag,叫做属性)。

举个例子,数字有一个叫做bit_length的方法。同样,我们使用“点”语法来访问它:

x.bit_length

为了真正地调用它,我们需要加上括号:

x.bit_length()

另外:如果你已经在做练习了,你实际上已经在调用方法了。在练习笔记本中,q1、q2、q3等都是具有名为check、hint和solution的方法的对象。

就像我们可以将函数传递给help函数一样(例如,help(max)),我们也可以传递方法:

help(x.bit_length)

上面的例子非常难懂。迄今为止,我们看过的对象类型(数字、函数、布尔值)都没有你可能会用到的属性或方法。

但事实证明,列表有几种你将经常使用的方法。

列表方法

list.append通过在末尾添加一个项来修改列表:

# Pluto is a planet darn it!
planets.append('Pluto')

为什么上面的单元格没有输出?让我们通过调用help(planets.append)来查看文档。

另外:append是所有类型为list的对象都具有的方法,不仅限于planets,所以我们也可以调用help(list.append)。然而,如果我们尝试调用help(append),Python会抱怨没有名为"append"的变量存在。"append"这个名称只存在于list中,它不像内置函数max或len那样作为一个单独的名称存在。

help(planets.append)

这部分告诉我们list.append方法没有返回任何值。但是如果我们检查planets的值,我们可以看到方法调用修改了planets的值。

planets

list.pop 移除并返回列表的最后一个元素。

planets.pop()

搜索列表

地球在行星的顺序中排第几?我们可以使用列表的.index方法来获取它的索引。

planets.index('Earth')

它排第三(即索引为2,从0开始计数!)。

冥王星(Pluto)位于哪个索引?

planets.index('Pluto')

噢,没错...

为了避免这样的不愉快惊喜,我们可以使用in运算符来确定列表是否包含特定的值:

# Is Earth a planet?
"Earth" in planets

# Is Calbefraques a planet?
"Calbefraques" in planets

还有一些我们还没有涵盖的有趣的列表方法。如果你想了解与特定对象关联的所有方法和属性,我们可以在对象本身上调用help()。例如,help(planets)将告诉我们所有列表方法:

help(planets)

(这里我没有贴全,大家自己尝试看看)

列表有很多方法,它们的名字看起来很奇怪,比如__eq__和__iadd__。现在不用担心这些方法太多。 (你可能永远不会直接调用这些方法。但是当我们使用索引或比较运算符的语法时,它们会在后台被调用。)最有趣的方法在列表的底部(如append,clear,copy等)。

元组

元组和列表几乎完全相同。它们只有两个不同之处。

1:创建元组的语法使用圆括号而不是方括号。

t = (1, 2, 3)
t = 1, 2, 3 # equivalent to above
t

2:它们不能被修改(它们是不可变的)。

t[0] = 100

元组经常用于具有多个返回值的函数。

例如,float对象的as_integer_ratio()方法返回一个分子和一个分母,以元组的形式返回:

x = 0.125
x.as_integer_ratio()

可以将这些多个返回值分别赋值如下:

numerator, denominator = x.as_integer_ratio()
print(numerator / denominator)

最后,我们终于对于经典的Python的朴实的技巧™,即交换两个变量有了一些了解!

a = 1
b = 0
a, b = b, a
print(a, b)

好啦,现在轮到你啦

最好的修行是实践,最好的学习是练习,Coding一下,试试吧。

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

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

相关文章

TrinityCore安装记录

TrinityCore模拟魔兽世界(World of Warcraft)的开源项目,并且该项目代码广泛的优化、改善和清理代码。 前期按照官方手册按部就班的安装即可。 注意几点: 1 需要配置Ubuntu22.04版本的服务器或者Debian11 服务器。2 需要使用gi…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-应用弹窗(十一)

一、应用弹窗 1、概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种模态窗口,通常用来展示用户…

如何结合ChatGPT生成个人魔法咒语词库

3.6.1 ChatGPT辅助力AI绘画 3.6.1.1 给定主题让ChatGPT直接描述 上面给了一个简易主题演示一下,这是完全我没有细化的提问,然后把直接把这些关键词组合在一起。 关键词: 黄山的美景,生机勃勃,湛蓝天空,青…

如何在PS5上使用金手指修改游戏

环境:windows PS5 问题:PS5 没有GodHen,无法使用json金手指,PKG金手指比较少 解决办法:使用MultiTrainerv从网络注入PS5,修改进程内存 背景:为了护肝,拒绝刷刷刷 解决过程&#xff…

计算机网络实验五

目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 (1)路由器设备名称的配置 (2)路由器每日提示信息配置 (3)路由器端口的IP地址配置 (4&…

【爬虫实战】全过程详细讲解如何使用python获取抖音评论,包括二级评论

简介: 前两天,TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了,但是其实二级评论更加有意思,同时二级评论的数量是很多。所以二级评论是非常值…

论文阅读-在分布式数据库环境中对哈希算法进行负载均衡基准测试

论文名称:Benchmarking Hashing Algorithms for Load Balancing in a Distributed Database Environment 摘要 现代高负载应用使用多个数据库实例存储数据。这样的架构需要数据一致性,并且确保数据在节点之间均匀分布很重要。负载均衡被用来实现这些目…

在windows平台上mysql的安装教程

1.下载 mysql下载网址:https://dev.mysql.com/downloads/installer/ 这里直接选择的是mysql的社区版。自己使用直接选择免费的就行 直接选择下载 2.安装过程 选择Server only 就行 下一步 下一步 下一步,选择弱密码把,方便学习和自己使用 设置…

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包: 创芯科技的官网:https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的: 所有下图是我选择…

操作系统-【预备学习-1】(Linux 文件目录)

文章目录 相关知识目录结构进入目录补充查看目录创建文件删除文件创建文件夹删除文件夹文件和文件夹拷贝文件和文件夹移动/重命名 任务要求 相关知识 目录结构 Linux 文件系统是树形层次结构,具体如下图所示,最重要的是根目录(/&#xff09…

IP协议(2) 和 数据链路层协议基础

IP协议续 1.路由选择 在复杂的网络结构中,我们需要找到一个通往终点的路线,这就是路由选择 举个例子:我们在没有手机导航之前,想去一个地方得是到一个地方问一下路的方式最终找到目的地 路由的过程,其实就是样子问路的过程 1.当IP数据包到达路由器的时候,会查看目的IP 2.路由器…

考研中常见的算法-逆置

元素逆置 概述:其实就是将 第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,依次到中间位置。用途:可用于数组的移动,字符串反转,链表反转操作,栈和队列反转等操作。 逆置图解 …

(已解决)spingboot 后端发送QQ邮箱验证码

打开QQ邮箱pop3请求服务&#xff1a;&#xff08;按照QQ邮箱引导操作&#xff09; 导入依赖&#xff08;不是maven项目就自己添加jar包&#xff09;&#xff1a; <!-- 邮件发送--><dependency><groupId>org.springframework.boot</groupId><…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器&#xff08;7、TcpServer & HttpServer的设计与实现&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务…

windows 搭建nginx http服务

下载 下面链接直接点击下载&#xff0c;下载的就是包含rtmp服务器相关功能的&#xff0c;只不过需要配置下 Index of /download/ (ecsds.eu) nginx 1.7.11.3 Gryphon.zip直接点击额下面的连接即可下载 http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip …

26.云原生ArgoCD高级之ApplicationSet

云原生专栏大纲 文章目录 ApplicationSet介绍ApplicationSet 特性ApplicationSet 安装ApplicationSet 工作原理ApplicationSet 生成器列表类型生成器集群生成器基础使用方法Label Selector 指定集群Values 字段传递额外的参数 git生成器git目录生成参数排除目录git文件生成器矩…

详解洛谷P2912 [USACO08OCT] Pasture Walking G(牧场行走)(lca模板题)

题目 思路 一道模板题&#xff0c;没啥好说的&#xff0c;直接见代码 代码 #include <bits/stdc.h> using namespace std; int n,q,a,to[100001][22],b,deep[100001],c,t[1000001]; struct ff {int id,len; }; vector<ff> vec[100001]; void dfs(int x,int fa,i…

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)

文章目录 0. Background1. Method2. Code3. Example: 雄鹿红外图像标注3.1 选择色彩空间3.2 执行阈值3.3 执行形态学操作3.4 轮廓分析以找到边界框3.5 过滤不需要的轮廓3.6 绘制边界框3.7 以需要的格式保存Reference本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包…

QT6调用音频输入输出(超详细)

目录 一、QT6音频调用与QT5的区别 1.QAudioSource代替QAudioInput类 2.QAudioSink代替QAudioOutput类 二、音频操作中Push和Pull的区别 三、依托于Websocket实现实时对讲机 1.AudioIputDevices类 2.AudioOutputDevices类 3.实现的AudioHandler类完整内容 本人实际是要完…

【学习笔记】详解换根法(换根DP)

一.换根DP的概念 1.换根DP是什么&#xff1f; 换根DP&#xff0c;又叫二次扫描&#xff0c;是树形DP的一种。 2.换根DP能解决什么问题&#xff1f; 换根DP能解决不指定根结点&#xff0c;并且根节点的变化会对一些值产生影响的问题。例如子结点深度和、点权和等。如果要 暴力…