政安晨:示例演绎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.hqwc.cn/news/450883.html

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

相关文章

股票交易

这里尝试利用单调队列优化,这里不好直接用单调队列的原因是因为(以买为例)\(-ap[i]*k_1\)不是只与下标有关的 所以解决方案一:我们将下标变成一个整体,再把后面的代价换掉然后将与下标无关的直接提出去 解决方案二:利用“蚯蚓”那…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面,旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户,都可以在本文中找到对应的内容,加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

自学网安-IIS服务器

部署环境:win2003 配置环境:winxp ip:10.1.1.2 win2003 ip:10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务(IIS)” 勾选万维网服务,确定然后下一步 查看端口号;netstat …

Fink CDC数据同步(三)Flink集成Hive

1 目的 持久化元数据 Flink利用Hive的MetaStore作为持久化的Catalog,我们可通过HiveCatalog将不同会话中的 Flink元数据存储到Hive Metastore 中。 利用 Flink 来读写 Hive 的表 Flink打通了与Hive的集成,如同使用SparkSQL或者Impala操作Hive中的数据…

阻塞队列(超详细易懂)

目录 一、阻塞队列 1.阻塞队列概述 2.生产者消费者模型 3.阻塞队列的作用 4.标准库中的阻塞队列类 5.例子:简单生产者消费者模型 二、阻塞队列模拟实现 1.实现循环队列(可跳过) 1.1简述环形队列 1.2代码实现 2.实现阻塞队列 2.1实…

[基础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被适当的设置,…

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制) 目录 回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注…

Linux下grep命令详解

grep #文件内容过滤显示 #在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用格式: grep-参数 查找条件 文件名 参数: 示例: [rootnode1 ~]# grep -n "root" /etc/passwd # -n&a…

070:vue中provide、inject的使用方法(图文示例)

第070个 查看专栏目录: VUE 本文章目录 示例背景示例效果图示例源代码父组件代码子组件代码孙组件代码 基本使用步骤 示例背景 本教程是介绍如何在vue中使用provide和inject。在 Vue 中,provide 和 inject 是用于实现祖先组件向后代组件传递数据的一种方式。 在这个…

【Nginx】Nginx

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 公司产品出现瓶颈Nginx作用Nginx安装window下安装linux下安装 Nginx常用命令 公司产品出现瓶颈 …

BGP协议

1.BGP相关概念 1.1 BGP的起源 不同自治系统(路由域)间路由交换与管理的需求推动了EGP的发展,但是EGP的算法简单,无法选路,从而被BGP取代。 自治系统:(AS) IGP:自治系统…

Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用

一、前言 之前在做倍速这个功能的时候,发现快速播放会有滴滴滴的破音出现,正常1倍速没有这个问题,尽管这个破音间隔很短,要放大音量才能听到,但是总归是不完美的,后面发现,通过修改qaudiooutpu…