参考来源:[Vitu.AI]

在之前的课程里,我们了解了python的值的各种类型,比如说字符串(str),整数(int)和浮点数(float)。

这一节课,我们来看看python如何用列表(list)和元组(tuple)来批量存储这些值,以及如何调用列表和元组的一些相关方法(method)。

列表的定义

在python里,列表(list)代表了有序排列的值。让我们来看一个例子:

primes = [2, 3, 5, 7]

又或者,我们可以将一系列的字符串放在列表(list)中:

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

甚至,我们可以在列表里放列表(list of list)。

# 我们也可以把它们写在同一行。
hands = [['J', 'Q', 'K'], ['2', '2', '2'], ['6', 'A', 'K']]
hands = [
    ['J', 'Q', 'K'],
    ['2', '2', '2'],
    ['6', 'A', 'K'], # 最后一个元素后的逗号是可选填的
]

除了可以批量放同一类型的值,一个列表(list)里也可以放不同类型的值。

my_favourite_things = [8, '皮卡丘', help]

在列表里索引

介绍完了列表的定义,接下来我们来看看和列表相关的方法。

索引(indexing), 代表我们可以通过在方括号[]填元素的位置来访问列表里的各个元素。

我们用上方创建的列表planets来做个例子。

比如,哪个行星离太阳最近?

因为python是从0开始索引的,因此第一个元素的索引为0。

planets[0]

再比如,第二接近太阳的行星是?

planets[1]

离太阳最远的行星是?

倒着数列表里的元素,可以通过负数来索引,从-1开始。

planets[-1]

离太阳第二远的行星是?

planets[-2]

在列表里切片

列表的第二个常用的方法是切片(slicing)。

离太阳最近的前三个行星是什么?
我们可以用切片(slicing)来回答这个问题:

planets[0:3]

planets[0:3]代表我们想要找该列表里的前三个元素,即从元素0开始,到第三个元素,即到元素2结束,值得注意的这里不包含元素3。

开始和结束的索引值都是自己填写的。如果我们不填写开始的索引值,那么它会被默认为0,就像下方看起来的样子,它代表我们想要找到该列表里的前三个元素。

planets[:3]

同样的,如果我们不填写结束的索引值,那么它会默认到这个列表的结束为止,值得注意的是这里的包含最后一个元素。

如下方所示,它代表我们想要在该列表里找到从第三个元素到最后的全部元素。

planets[3:]

我们同样可以用负数来做切片。

# 展示所有的行星,除了第一个和最后一个
planets[1:-1]
# 最后三个行星
planets[-3:]

改变列表

列表(List)是可变的,这意味这它们可以随时被修改。

其中,一种修改列表里元素的方式是,直接通过索引赋新的值。

举个例子,我们可以改变列表里的Mars:

planets[3] = 'Malacandra'
planets

哇哦,火星的全名称太费口舌了。我们可以缩写前三个行星的名称来弥补。

planets[:3] = ['Mur', 'Vee', 'Ur']
print(planets)

可用于列表的函数

让我们首先还原我们的planet列表。

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

Python有一些关于列表的函数。

比如,len可以告诉我们这个列表的长度:

# 一共有多少星球?
len(planets)

再比如,sorted可以将列表按照字母表的排序返回。

sorted(planets)

sum的话呢,可以给出你期待的计算总值:

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

在之前的课程里,我们使用过min和max来获得几个参数里的最小值或者最大值。这一次,我们可以直接传入列表。

# 获取primes这一列表里的最大值
max(primes)

# 获取primes这一列表里的最小值
min(primes)

列表方法

在列表里增加元素

首先,list.append()可以在列表的最后添加一个元素,举个例子:

# 冥王星曾经也是一颗行星:
planets.append('Pluto')

为什么上面的代码没有输出呢?
让我们通过之前学习的help()函数来看看吧:

help(planets.append)

这个帮助告诉我们,list.append()不返回任何值。

但是,如果我们查看列表planets的值,我们可以看到这个列表的最后一项已经是冥王星:

planets

你一定很好奇,为什么我们直接用·就可以调用列表的方法,比如list.append。

这是python特有的语法, 通过小圆点可以调用跟这个对象(object)相关的函数。这种跟一个对象有关的函数,我们可以叫做方法(method)。

而python里的几乎所有东西都可以被称为对象(object),比如我们已将学习过的参数,变量 (variable),列表(list),元组(tuple)和还没有看到的字典(dict)和类(class)。

举个跟列表不相关的例子。在python中的number中带有一个名为imag的关联变量,代表它们的虚部(你可能永远不需要使用它,除非你做了一些非常奇怪的数学运算)。

# x是一个整数,所以它的虚部为0

x = 12
print(x.imag)

在列表里删除元素

其次,list.pop会删除列表的最后一项元素并返回这个被删除的元素。

当我们再次查看列表planets的值,我们可以看到这个列表的最后一项的冥王星已被移除:

planets

在列表寻找元素

在列表planet里,地球排在什么位置呢?

我么可以通过list.index()来实现:

planets.index('Earth')

上述的代码说明,地球是第三近太阳的行星。

那么,在现在的列表planet里,冥王星排在哪里呢?

planets.index('Pluto')

没错,冥王星已经被我们移出太阳系行星的列表了。

所以,为了预防这一类令人沮丧的不愉快输出结果,我们可以用in这一运算来判断这一个列表里是否含有一个特殊的值:

# 地球是行星吗?
"Earth" in planets
# 月亮是行星吗?
"Moon" in planets

关于列表,还有很多有趣的方法可以调用。我们可以通过help()来学习更多有趣的方法。

但是不用担心,你在下方看到的--add--或者 --eq--,这些我们基本不会直接调用。

而更下方的append, clear, copy才是我们需要关注学习的。

help(planets)

元组

元组(tuple)和列表基本差不多,只在两个方面有差别。

第一点,创建元组的语法是用圆括号(),而创建列表是通过方括号[].

第二点,元组是不可以更改的,一旦创建,便固定了。

# 如何创建列表?
t = (1, 2, 3)

t
# 也可以省略圆括号
t = 1, 2, 3

t

但是元组是不能修改元素的。因此,运行下方的代码,会出错“元组不支持事物重新赋值”。

t[0] = 100

元组(tuple)通常用于具有多个返回值的函数。

例如,float的一个方法as_integer_ratio以元组的形式返回,即(分子,分母)。

x = 0.125
x.as_integer_ratio()

元组里的这些值可以赋予不同的变量:

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

最后,通过上方元组,我们可以得到一些启发,如何互换两个变量的值?

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

聪明的你,想明白了吗?

上述的代码,先将1和0分别赋予变量a和b, 然后打包成两个元组a,b和b,a,再将a,b元组里的值分别赋予b,a元组里的值。

原文地址:初识python【今天开始写代码】第四课


VituTech
1 声望2 粉丝