返回介绍

4.4 方法

发布于 2024-01-22 21:44:07 字数 4496 浏览 0 评论 0 收藏 0

方法和函数是一回事,只是它是调用在一个值上。例如,如果一个列表值存储在spam中,你可以在这个列表上调用index()列表方法(稍后我会解释),就像spam.index('hello')一样。方法部分跟在这个值后面,以一个句点分隔。

每种数据类型都有它自己的一组方法。例如,列表数据类型有一些有用的方法,用来查找、添加、删除或操作列表中的值。

4.4.1 用index()方法在列表中查找值

列表值有一个index()方法,可以传入一个值,如果该值存在于列表中,就返回它的下标。如果该值不在列表中,Python就报ValueError。在交互式环境中输入以下代码:

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> spam.index('hello')
0
>>> spam.index('heyas')
3
>>> spam.index('howdy howdy howdy')
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    spam.index('howdy howdy howdy')
ValueError: 'howdy howdy howdy' is not in list

如果列表中存在重复的值,就返回它第一次出现的下标。在交互式环境中输入以下代码,注意index()返回1,而不是3:

>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1

4.4.2 用append()和insert()方法在列表中添加值

要在列表中添加新值,就使用append()和 insert()方法。在交互式环境中输入以下代码,对变量spam中的列表调用append()方法:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.append('moose')
>>> spam
['cat', 'dog', 'bat', 'moose']

前面的append()方法调用,将参数添加到列表末尾。insert()方法可以在列表任意下标处插入一个值。insert()方法的第一个参数是新值的下标,第二个参数是要插入的新值。在交互式环境中输入以下代码:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']

请注意,代码是spam.append('moose')和spam.insert(1, 'chicken'),而不是spam = spam.append('moose')和spam = spam.insert(1, 'chicken')。append()和insert()都不会将spam的新值作为其返回值(实际上,append()和insert()的返回值是None,所以你肯定不希望将它保存为变量的新值)。但是,列表被“当场”修改了。在4.6.1节“可变和不变数据类型”中,将更详细地介绍当场修改一个列表。

方法属于单个数据类型。append()和insert()方法是列表方法,只能在列表上调用,不能在其他值上调用,例如字符串和整型。在交互式环境中输入以下代码,注意产生的AttributeError错误信息:

>>> eggs = 'hello'
>>> eggs.append('world')
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    eggs.append('world')
AttributeError: 'str' object has no attribute 'append'
>>> bacon = 42
>>> bacon.insert(1, 'world')
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    bacon.insert(1, 'world')
AttributeError: 'int' object has no attribute 'insert'

4.4.3 用remove()方法从列表中删除值

给 remove()方法传入一个值,它将从被调用的列表中删除。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('bat')
>>> spam
['cat', 'rat', 'elephant']

试图删除列表中不存在的值,将导致ValueError错误。例如,在交互式环境中输入以下代码,注意显示的错误:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('chicken')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    spam.remove('chicken')
ValueError: list.remove(x): x not in list

如果该值在列表中出现多次,只有第一次出现的值会被删除。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'cat', 'hat', 'cat']
>>> spam.remove('cat')
>>> spam
['bat', 'rat', 'cat', 'hat', 'cat']

如果知道想要删除的值在列表中的下标,del语句就很好用。如果知道想要从列表中删除的值,remove()方法就很好用。

4.4.4 用sort()方法将列表中的值排序

数值的列表或字符串的列表,能用sort()方法排序。例如,在交互式环境中输入以下代码:

>>> spam = [2, 5, 3.14, 1, -7]
>>> spam.sort()
>>> spam
[-7, 1, 2, 3.14, 5]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']

也可以指定reverse关键字参数为True,让sort()按逆序排序。在交互式环境中输入以下代码:

>>> spam.sort(reverse=True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']

关于sort()方法,你应该注意3件事。首先,sort()方法当场对列表排序。不要写出spam = spam.sort()这样的代码,试图记录返回值。

其次,不能对既有数字又有字符串值的列表排序,因为Python不知道如何比较它们。在交互式环境中输入以下代码,注意TypeError错误:

>>> spam = [1, 3, 2, 4, 'Alice', 'Bob']
>>> spam.sort()
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    spam.sort()
TypeError: unorderable types: str() < int()

第三,sort()方法对字符串排序时,使用“ASCII字符顺序”,而不是实际的字典顺序。这意味着大写字母排在小写字母之前。因此在排序时,小写的a在大写的Z之后。例如,在交互式环境中输入以下代码:

>>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
>>> spam.sort()
>>> spam
['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']

如果需要按照普通的字典顺序来排序,就在sort()方法调用时,将关键字参数key设置为str.lower。

>>> spam = ['a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']

这将导致sort()方法将列表中所有的表项当成小写,但实际上并不会改变它们在列表中的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文