参考来源:[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元组里的值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。