Python 基础教程(3rd ed)(32):列表和元组 2.2.5

阅读数:23 2019 年 10 月 26 日 09:51

Python基础教程(3rd ed)(32):列表和元组 2.2.5

(通用的序列操作:成员资格)

要检查特定的值是否包含在序列中,可使用运算符in。这个运算符与前面讨论的运算符(如乘法或加法运算符)稍有不同。它检查是否满足指定的条件,并返回相应的值:满足时返回True,不满足时返回False。这样的运算符称为布尔运算符,而前述真值称为布尔值。布尔表达式将在 5.4 节详细介绍。

下面是一些in运算符的使用示例:

复制代码
>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False
>>> users = ['mlh', 'foo', 'bar']
>>> input('Enter your user name: ') in users
Enter your user name: mlh
True
>>> subject = '$$$ Get rich now!!! $$$'
>>> '$$$' in subject
True

开头两个示例使用成员资格测试分别检查'w''x'是否包含在字符串变量permissions中。在 UNIX 系统中,可在脚本中使用这两行代码来检查对文件的写入和执行权限。接下来的示例检查提供的用户名 mlh 是否包含在用户列表中,这在程序需要执行特定的安全策略时很有用(在这种情况下,可能还需检查密码)。最后一个示例检查字符串变量subject是否包含字符串'$$$',这可用于垃圾邮件过滤器中。

注意 相比于其他示例,检查字符串是否包含'$$$'的示例稍有不同。一般而言,运算符in检查指定的对象是否是序列(或其他集合)的成员(即其中的一个元素),但对字符串来说,只有它包含的字符才是其成员或元素,因此下面的代码完全合理:

复制代码
>>> 'P' in 'Python'
True

事实上,在较早的 Python 版本中,只能对字符串执行这种成员资格检查——确定指定的字符是否包含在字符串中,但现在可使用运算符in来检查指定的字符串是否为另一个字符串的子串。

代码清单 2-4 所示的程序从用户那里获取一个用户名和一个 PIN 码,并检查它们组成的列表是否包含在数据库(实际上也是一个列表)中。如果用户名 -PIN 码对包含在数据库中,就打印字符串'Access granted'if语句在第 1 章提到过,并将在第 5 章全面介绍)。

代码清单 2-4 序列成员资格示例

复制代码
# 检查用户名和 PIN 码
database = [
['albert', '1234'],
['dilbert', '4242'],
['smith', '7524'],
['jones', '9843']
]
username = input('User name: ')
pin = input('PIN code: ')
if [username, pin] in database: print('Access granted')

长度、最小值和最大值

内置函数lenminmax很有用,其中函数len返回序列包含的元素个数,而minmax分别返回序列中最小和最大的元素(对象比较将在 5.4.6 节的“比较运算符”部分详细介绍)。

复制代码
>>> numbers = [100, 34, 678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>> max(2, 3)
3
>>> min(9, 3, 2, 5)
2

基于前面的解释,这些代码应该很容易理解,但最后两个表达式可能例外。在这两个表达式中,调用maxmin时指定的实参并不是序列,而直接将数作为实参。

评论

发布