政安晨:示例演绎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一下,试试吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

预充电阻原理作用,直流预充电电路设计指南

最初将电池连接到具有容性输入的负载时,当负载电容充电至电池电压时,会出现电流涌入。 对于大型电池(具有低源电阻)和强大的负载(输入端具有大电容器),浪涌电流可以很容易地达到 1000 A 的峰值。…

WPS Office18.7软件日常更新

【应用名称】:WPS Office 【适用平台】:#Android 【软件标签】:#WPS 【应用版本】:18.6.1➡18.7 【应用大小】:160MB 【软件说明】:软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模…

C++棋类小游戏2

今天给大家带来我花了1周时间自创的小游戏的升级版,博主还是一名小学生,希望大家提提意见。这是我写的最长的C代码,希望大家喜欢,不要抄袭,任何编译器都可以。 以前版本——C自创棋类小游戏-CSDN博客 C内容提示&…

python 爬虫安装http请求库

我的是window环境,安装的python3,如果再linux环境:pip install requests 开始: 上面我们成功发送请求并获取到响应,现在需要解析html或xml获取数据,因此我使用现成的工具库Beautiful Soup

【用Unity开发一款横板跳跃游戏部分需要学习的技术点指南】

*** 用Unity开发一款横板跳跃游戏部分需要学习的技术点指南 空洞骑士是一款基于横板平台跳跃的传统风格2D动作冒险游戏,庞大的游戏世界交错相通,玩家控制小虫子去探索幽深黑暗的洞穴,成为了一代人茶余饭后的惦念,深受玩家喜爱。 …

AI新宠Arc浏览器真可以取代Chrome吗?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

整理:汉诺塔简析

大体上,要解决一个汉诺塔问题,就需要解决两个更简单的汉诺塔问题 以盘子数量 3 的汉诺塔问题为例 要将 3 个盘子从 A 移动到 C,就要: 将两个盘子从 A 移动到 B(子问题 1) 为了解决子问题 1,就…

Leetcode—2881. 创建新列【简单】

2024每日刷题(一零九) Leetcode—2881. 创建新列 实现代码 import pandas as pddef createBonusColumn(employees: pd.DataFrame) -> pd.DataFrame:employees[bonus] employees[salary] * 2return employees 运行结果 之后我会持续更新&#xf…

给mysql设置时区

每次重启MySQL服务器后,使用IDEA的database navigator连接都会出现这种情况 解决方式就是 命令行登录后 set global time_zone 8:00;嘿嘿把之前自家简书文章 给mysql设置时区 搬运过来了,方便查阅

[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}

文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…

详解SkyWalking前端监控的性能指标

SkyWalking 从8.2.0版本开始支持对前端浏览器端的性能进行监控,不仅可以像以前一样监控浏览器发送给后端服务的与请求,还能看到前端的渲染速度、错误日志等信息——这些信息是获取最终用户体验的最有效指标。实现的方式是引入skywalking-client-js库&…

二叉树可视化

二叉树可视化 运行演示代码和程序已上传二叉树知识平衡二叉树红黑树最优二叉搜索树哈夫曼树KD树B树和B树 参考 运行演示 学习二叉树总是脑补图像,实在是恶心,就想写一个能可视化的二叉树,结果没控制好,功能越想越多,先…

【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

我们在 Windows 中编写 C/C 程序时,常用的 VS2019 是一个集成开发环境,包含了很多工具包。而在 Linux 下开发,大部分的情况下都是使用一个个独立的工具。比如:编写代码用 vim,编译代码用 gcc,调试代码用 gd…

异步编程Completablefuture使用详解----进阶篇

JDK版本:jdk17 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 前言一、异步任务的交互1.1 applyToEither1.2 acceptEither1.3 runAfterEither 二、get() 和 join() 区别三、ParallelStream VS CompletableFuture3.1 使用串行流执行并统计总耗时3.2 使用并行…

《幻兽帕鲁》开荒最强帕鲁推荐!轻松拿下各种BOSS 幻兽帕鲁爆火 幻兽帕鲁2月服务器费用7000万 幻兽帕鲁图鉴

最近一款叫做《幻兽帕鲁》的新游戏走红,成为了Steam游戏平台上,连续3周的销量冠军,有不少Mac电脑用户,利用CrossOver成功玩上了《幻兽帕鲁》,其实CrossOver已经支持很多3A游戏,包括《赛博朋克2077》《博德之…

Ps:自动对齐图层

Ps菜单:编辑/自动对齐图层 Edit/Auto-Align Layers 自动对齐图层 Auto-Align Layers命令通过分析选中图层上的图像,识别出图像间的共同特征点(如边缘、纹理或特定标记等),然后基于这些特征点变换(移动、旋转…

python 爬虫篇(2)---->re正则实战豆瓣读书爬取(附带源码)

re正则实战—豆瓣读书爬取 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 re正则实战---豆瓣读书爬取前言一、准备工具二、构建请求头三、请求数据四、解析数据五、保存数据总结(源码)前言 大家好,今天我们来写一个豆瓣读书的爬虫程序,我会只用…

ProcessSlot构建流程分析

ProcessorSlot ProcessorSlot构建流程 // com.alibaba.csp.sentinel.CtSph#lookProcessChain private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)throws BlockException {// 省略创建 Context 的代码// 黑盒…

Rust 第一个rust程序Hello Rust️

文章目录 前言一、vscode 安装rust相关插件二、Cargo New三、vscode调试rustLLDB 前言 Rust学习系列。今天就让我们掌握第一个rust程序。Hello Rust 🦀️。 在上一篇文章我们在macOS成功安装了rust。 一、vscode 安装rust相关插件 以下是一些常用的 Rust 开发插件…

Axure RP 网页版,让原型设计更高效

交互神器Axure RP是一种专业的快速原型设计工具,但Axure在用户体验上的缺陷也很明显。其设置交互方式相对繁琐,可视化不足、条件判断、变量、中继器等功能的使用需要陡峭的学习曲线。许多设计师正在寻找一个可以取代Axure的原型设计工具,即时…