列表

在你能够开始编写程序之前,还有一个主题需要理解,那就是列表数据类型及元组。列表和元组可以包含多个值,这样编写程序来处理大量数据就变得更容易。而且,由于列表本身又可以包含其他列表,所以可以用它们将数据安排成层次结构。

列表数据类型

“列表”是一个值,它包含多个字构成的序列。术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那些值。列表值看起来像这样:[‘cat’, ‘bat’, ‘rat’, ‘elephant’]。就像字符串值用引号来标记字符串的起止一样,列表用左方括号开始,右方括号结束,即 [ ] 。列表中的值也称为“表项”。表项用逗号分隔(就是说,它们是“逗号分隔的”)。

例如,在交互式环境中输入以下代码:
在这里插入图片描述
spam 变量仍然只被赋予一个值:列表值。但列表值本身包含多个值。[ ] 是一个空列表,不包含任何值,类似于空字符串’’。

用下标取得列表中的单个值

假定列表[‘cat’, ‘bat’, ‘rat’, ‘elephant’]保存在名为 spam 的变量中。Python 代码spam[0]将求值为’cat’,spam[1]将求值为’bat’,依此类推。列表后面方括号内的整数被称为“下标”。列表中第一个值的下标是 0,第二个值的下标是 1,第三个值的下标是 2,依此类推。下图展示了一个赋给 spam 的列表值,以及下标表达式的求值结果:
在这里插入图片描述
例如,在交互式环境中输入以下表达式。开始将列表赋给变量 spam。
在这里插入图片描述
注意,表达式’Hello ’ + spam[0] 求值为’Hello ’ + ‘cat’,因为 spam[0]求值为字符串’cat’。这个表达式也因此求值为字符串’Hello cat’。

如果使用的下标超出了列表中值的个数,Python 将给出 IndexError 出错信息:
在这里插入图片描述
下标只能是整数,不能是浮点值。下面的例子将导致 TypeError 错误:
在这里插入图片描述
列表也可以包含其他列表值。这些列表的列表中的值,可以通过多重下标来访问,像这样:
在这里插入图片描述
第一个下标表明使用哪个列表值,第二个下标表明该列表值中的值。例如,spam[0][1]打印出’bat’,即第一个列表中的第二个值。如果只使用一个下标,程序将打印出该下标处的完整列表值。

负数下标

虽然下标从 0 开始并向上增长,但也可以用负整数作为下标。整数值−1 指的是列表中的最后一个下标,−2 指的是列表中倒数第二个下标,以此类推。在交互式环境中输入以下代码:
在这里插入图片描述

利用切片取得子列表

就像下标可以从列表中取得单个值一样,“切片”可以从列表中取得多个值,结果是一个新列表。切片输入在一对方括号中,像下标一样,但它有两个冒号分隔的整数。请注意下标和切片的不同。

  • spam[2]是一个列表和下标(一个整数)。
  • spam[1:4]是一个列表和切片(两个整数)。

在一个切片中,第一个整数是切片开始处的下标。第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。切片求值为一个新的列表值。在交互式环境中输入以下代码:

在这里插入图片描述
作为快捷方法,你可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标相当于使用 0,或列表的开始。省略第二个下标相当于使用列表的长度,意味着分片直至列表的末尾。在交互式环境中输入以下代码:
在这里插入图片描述

用 len()取得列表的长度

len()函数将返回传递给它的列表中值的个数,就像它能计算字符串中字符的个数一样。在交互式环境中输入以下代码:
在这里插入图片描述

用下标改变列表中的值

一般情况下,赋值语句左边是一个变量名,就像 spam = 4。但是,也可以使用列表的下标来改变下标处的值。例如,spam[1] = ‘aardvark’意味着“将列表 spam 下标 1 处的值赋值为字符串’aardvark’。在交互式环境中输入以下代码:
在这里插入图片描述

列表连接和列表复制

+操作符可以连接两个列表,得到一个新列表,就像它将两个字符串合并成一个新字符串一样。*操作符可以用于一个列表和一个整数,实现列表的复制。在交互式环境中输入以下代码:
在这里插入图片描述

用 del 语句从列表中删除值

del 语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标。例如,在交互式环境中输入以下代码:
在这里插入图片描述
del 语句也可用于一个简单变量,删除它,作用就像是“取消赋值”语句。如果在删除之后试图使用该变量,就会遇到 NameError 错误,因为该变量已不再存在。

在实践中,你几乎永远不需要删除简单变量。del 语句几乎总是用于删除列表中的值。

使用列表

当你第一次开始编程时,很容易会创建许多独立的变量,来保存一组类似的值。例如,如果要保存我的猫的名字,可能会写出这样的代码:

catName1 = 'Zophie'
catName2 = 'Pooka'
catName3 = 'Simon'
catName4 = 'Lady Macbeth'
catName5 = 'Fat-tail' 
catName6 = 'Miss Cleo'

事实表明这是一种不好的编程方式。举一个例子,如果猫的数目发生改变,程序就不得不增加变量,来保存更多的猫。这种类型的程序也有很多重复或几乎相等的代码。考虑下面的程序中有多少重复代码,在文本编辑器中输入它并保存为 allMyCats1.py:

print('Enter the name of cat 1:')
catName1 = input()
print('Enter the name of cat 2:')
catName2 = input()
print('Enter the name of cat 3:')
catName3 = input()
print('Enter the name of cat 4:') 
catName4 = input()
print('Enter the name of cat 5:')
catName5 = input()
print('Enter the name of cat 6:')
catName6 = input()
print('The cat names are:')
print(catName1 + ' ' + catName2 + ' ' + catName3 + ' ' + catName4 + ' ' +
catName5 + ' ' + catName6)

不必使用多个重复的变量,你可以使用单个变量,包含一个列表值。例如,下面是新的改进版本的 allMyCats1.py 程序。这个新版本使用了一个列表,可以保存用户输入的任意多的猫。在新的文件编辑器窗口中,输入以下代码并保存为 allMyCats2.py。

catNames = []
while True:
	print('Enter the name of cat ' + str(len(catNames) + 1) +' (Or enter nothing to stop.):') 
	name = input()
	if name == '':
		break 
	catNames = catNames + [name] # list concatenation
print('The cat names are:')
for name in catNames:
	print(' ' + name)

运行这个程序,输出看起来像这样:

Enter the name of cat 1 (Or enter nothing to stop.):
Zophie
Enter the name of cat 2 (Or enter nothing to stop.):
Pooka
Enter the name of cat 3 (Or enter nothing to stop.):
Simon
Enter the name of cat 4 (Or enter nothing to stop.):
Lady Macbeth
Enter the name of cat 5 (Or enter nothing to stop.):
Fat-tail
Enter the name of cat 6 (Or enter nothing to stop.): 
Miss Cleo
Enter the name of cat 7 (Or enter nothing to stop.):

The cat names are:
  Zophie
  Pooka
  Simon
  Lady Macbeth
  Fat-tail
  Miss Cleo

使用列表的好处在于,现在数据放在一个结构中,所以程序能够更灵活的处理数据,比放在一些重复的变量中方便。

列表用于循环

从技术上说,循环是针对一个列表或类似列表中的每个值,重复地执行代码块。例如,如果执行以下代码:

for i in range(4):
	print(i)

程序的输出将是:

0
1
2
3

这是因为 range(4)的返回值是类似列表的值。Python 认为它类似于[0, 1, 2, 3]。下面的程序和前面的程序输出相同:

for i in [0, 1, 2, 3]:
	print(i)

前面的 for 循环实际上是在循环执行它的子句,在每次迭代中,让变量依次设置为列表中的值。

in 和 not in 操作符

利用 in 和 not in 操作符,可以确定一个值否在列表中。像其他操作符一样,in和 not in 用在表达式中,连接两个值:一个要在列表中查找的值,以及待查找的列表。这些表达式将求值为布尔值。在交互式环境中输入以下代码:
在这里插入图片描述

多重赋值技巧

多重赋值技巧是一种快捷方式,让你在一行代码中,用列表中的值为多个变量赋值。所以不必像这样:
在这里插入图片描述
而是输入下面的代码:
在这里插入图片描述
变量的数目和列表的长度必须严格相等,否则 Python 将给出 ValueError:
在这里插入图片描述

增强的赋值操作

在对变量赋值时,常常会用到变量本身。例如,将 42 赋给变量 spam 之后,用下面的代码让 spam 的值增加 1:
在这里插入图片描述
作为一种快捷方式,可以用增强的赋值操作符+=来完成同样的事:
在这里插入图片描述
针对+、-、*、/和%操作符,都有增强的赋值操作符,如表所示:

增强的赋值语句 等价的赋值语句
spam += 1 spam = spam + 1
spam -= 1 spam = spam - 1
spam *= 1 spam = spam * 1
spam /= 1 spam = spam / 1
spam %= 1 spam = spam % 1

+=操作符也可以完成字符串和列表的连接,*=操作符可以完成字符串和列表的复制。在交互式环境中输入以下代码:
在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐