Python 3 中有许多内置的数据结构,其中包括列表。数据结构为我们提供了一种组织和存储数据的方式,我们可以使用内置方法来检索或操作这些数据。
要充分利用本教程,您应该对列表数据类型以及它的语法和索引有一定的了解。您可以通过阅读教程《理解 Python 3 中的列表》来复习列表内容。
在这里,我们将介绍您可以用于处理列表的内置方法。我们将向列表添加项目并从列表中删除项目,扩展列表,反转和排序列表等等。
重要的是要记住,列表是可变的数据类型。与不可变的字符串不同,每当您在列表上使用方法时,您会影响列表本身而不是列表的副本。
在本教程中,我们将主要使用一个由各种需要修改的鱼组成的清单,因为鱼被添加到或从市政水族馆中移除。
您应该已经安装了 Python 3,并在计算机或服务器上设置了编程环境。如果您还没有设置编程环境,可以参考本地编程环境的安装和设置指南,或者适合您操作系统(Ubuntu、CentOS、Debian 等)的服务器编程环境的指南。
list.append(x)
方法将项目(x
)添加到列表的末尾。我们将以分散在整个水族馆中的鱼的列表开始。
fish = ['barracuda','cod','devil ray','eel']
这个列表包含 4 个字符串项目,它们的索引编号从 0 的 'barracuda'
到索引 3 的 'eel'
。
我们今天在水族馆里得到了一种新鱼,我们想把这种鱼添加到我们的清单中。我们将新鱼类型的字符串 'flounder'
传递给 list.append()
方法,然后打印出我们修改后的列表,以确认项目已添加。
fish.append('flounder')
print(fish)
['barracuda', 'cod', 'devil ray', 'eel', 'flounder']
现在,我们有一个包含 5 个字符串项目的列表,最后一项是我们传递给 .append()
函数的项目。
list.insert(i,x)
方法接受两个参数,i
是您想要添加项目的索引位置,x
是项目本身。
我们的水族馆获得了另一种新鱼,一种凤尾鱼。到目前为止,您可能已经注意到鱼列表 fish
是按字母顺序排列的。因此,我们不想只使用 list.append()
函数将字符串 'anchovy'
添加到 fish
的末尾。相反,我们将使用 list.insert()
在此列表中的索引位置 0
处添加 'anchovy'
到列表的开头:
fish.insert(0,'anchovy')
print(fish)
['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder']
在这种情况下,我们在列表的开头添加了字符串项目。随着它们的移动,每个连续的项目现在都将位于新的索引编号。因此,'barracuda'
将位于索引 1,'cod'
将位于索引 2,'flounder'
——最后一个项目——将位于索引 5。
如果此时我们将一只雀鲷带到水族馆,并希望根据上面的列表保持字母顺序的话,我们将将项目放在索引 3
处:fish.insert(3,'damselfish')
。
如果我们想要合并多个列表,我们可以使用 list.extend(L)
方法,它接受第二个列表作为其参数。
我们的水族馆欢迎另一个关闭的水族馆中的四种新鱼。我们已经将这些鱼放在名为 more_fish
的列表中:
more_fish = ['goby','herring','ide','kissing gourami']
现在,我们将列表 more_fish
中的项目添加到列表 fish
并打印列表,确保第二个列表已合并:
fish.extend(more_fish)
print(fish)
['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder', 'goby', 'herring', 'ide', 'kissing gourami']
在这一点上,列表 fish
包含 10 个项目。
当我们需要从列表中删除一个项目时,我们将使用 list.remove(x)
方法,该方法将删除列表中第一个值等于 x
的项目。
一组当地的研究科学家前来参观水族馆。他们正在研究吻鬼鱼物种。他们要求我们借给他们我们的吻鬼鱼,因此我们想要从列表中删除 'kissing gourami'
来反映这一变化:
fish.remove('kissing gourami')
print(fish)
['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder', 'goby', 'herring', 'ide']
使用 list.remove()
方法后,我们的列表不再包含 'kissing gourami'
项目。
如果您在 list.remove()
中传递一个列表中不存在的项目 x
,您将收到以下错误:
ValueError: list.remove(x): x not in list
请记住 list.remove()
只会删除您传递给它的第一个项目实例,因此如果我们在水族馆中有两只吻鬼鱼,我们仍然可以使用 fish.remove('kissing gourami')
来删除列表中的第二只吻鬼鱼。
我们可以使用 list.pop([i])
方法返回列表中给定索引位置的项目,然后删除该项目。方括号中的 i
表示这个参数是可选的,因此如果我们不指定索引(例如 fish.pop()
),将返回并删除最后一个项目。
我们的魔鬼鬼鲛已经长得太大了,幸运的是,城镇附近的几个城镇可以满足鬼鲛的需要。我们将使用 .pop()
并指定字符串项目 'devil ray'
的索引编号(3
)来从我们的列表中删除该项目,并通过返回它来确认我们正在删除正确的项目。
print(fish.pop(3))
print(fish)
devil ray
['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']
通过使用 .pop()
方法,我们能够从列表 fish
中返回并删除了 'devil ray'
。
如果我们向此方法传递不带参数并执行 fish.pop()
,最后一个项目 'ide'
将被返回,然后从列表中删除。
当列表开始变得很长时,我们很难计算出项目的索引位置。我们可以使用 list.index(x)
,其中 x
等于一个项目值,来返回列表中该项目的索引。如果具有值 x
的项目超过一个,此方法将返回第一个索引位置。
print(fish)
print(fish.index('herring'))
['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']
6
虽然列表 fish
不是很长,我们仍然可以在不计数的情况下确定项目 'herring'
的索引位置。了解每个项目的索引很重要,以便我们能够有效地操作列表。
如果我们指定值并在给定列表中不存在这样的值时使用 .index()
,我们将收到错误消息:ValueError: 'x' is not in list
。
当我们使用一个列表并希望在多种方式下对其进行操作,同时仍然可以使用原始列表,我们可以使用 list.copy()
来制作列表的副本。
我们将从 fish.copy()
返回的值传递给变量 fish_2
,然后打印出 fish_2
的值,以确保它是一个与 fish
具有相同项目的列表。
fish_2 = fish.copy()
print(fish_2)
['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']
此时,fish
和 fish_2
都是等效的列表。
我们可以使用 list.reverse()
方法来反转列表中项目的顺序。也许对于我们来说,使用逆字母顺序比传统的字母顺序更方便。在这种情况下,我们需要使用 .reverse()
方法来反转 fish
列表中的列表。
fish.reverse()
print(fish)
['ide', 'herring', 'goby', 'flounder', 'eel', 'cod', 'barracuda', 'anchovy']
使用 .reverse()
方法后,我们的列表以原来列表的最后一项 'ide'
开始,并以原来列表的第一项 'anchovy'
结束。
list.count(x)
方法将返回指定列表中值为 x
的次数。当列表中有许多匹配值时,我们可能会使用此方法。例如,如果我们有一个更大的水族馆,并且对每条霓虹灯鱼都设置了一个项目,我们可以使用 .count()
来确定我们随时拥有的所有霓虹灯鱼的总数。
我们将使用当前的列表来计算项 'goby'
出现的次数:
print(fish.count('goby'))
1
因为字符串 'goby'
只出现一次,当我们使用 .count()
方法时,数字 1 被返回。
让我们也将这个方法与一个整数列表一起使用。我们的水族馆致力于为每一条鱼提供很好的护理,所以我们正在追踪我们每条鱼的年龄,以便我们可以确保他们的饮食满足根据年龄来判断鱼的需求。这个第二个列表 fish_ages
对应于我们的另一个列表 fish
中的鱼的类型。
因为 1 岁的鱼有特殊的饮食需求,我们将计算我们有多少条 1 岁的鱼:
fish_ages = [1,2,4,3,2,1,1,2]
print(fish_ages.count(1))
3
整数 1
在列表 fish_ages
中出现 3 次,所以当我们使用 .count()
方法时,数字 3 被返回。
我们可以使用 list.sort()
方法来对列表中的项目进行排序。
就像 list.count()
一样,list.sort()
可以更清楚地显示出某个整数值有多少个,也可以将一个未排序的数字列表排列成数字顺序。
让我们使用整数列表 fish_ages
来查看 .sort()
方法的效果:
fish_ages.sort()
print(fish_ages)
[1, 1, 1, 2, 2, 2, 3, 4]
通过使用 .sort()
和 fish_ages
,整数值按顺序返回。在实践中,由于这些年龄对应特定的鱼,通常会希望在排序之前复制原始列表。
当我们完成列表的使用时,我们可以使用 list.clear()
方法来移除列表中的所有值。
当地政府决定接管我们的水族馆,将其打造成城市人民享受的公共场所。由于我们不再自己管理水族馆,我们也不再需要保留鱼的清单,所以让我们清空 fish
列表:
fish.clear()
print(fish)
[]
在使用 fish.clear()
函数后,我们收到了方括号作为输出,让我们知道列表现在已经清空了所有项目。
作为可变的有序元素序列,列表在 Python 中是非常灵活的数据结构。列表方法使我们能够以复杂的方式处理列表。我们可以将方法与其他方法结合使用以其他方式修改列表,以便在我们的程序中有效地使用列表。从这里,您可以阅读关于列表推导,以基于现有列表来创建列表。