简介
本节介绍列表,它是 Python 中用于保存有序值集合的主要类型。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
本节介绍列表,它是 Python 中用于保存有序值集合的主要类型。
使用方括号来定义列表字面量:
names = [ 'Elwood', 'Jake', 'Curtis' ]
nums = [ 39, 38, 42, 65, 111]
有时列表是通过其他方法创建的。例如,可以使用 split()
方法将字符串拆分为列表:
>>> line = 'GOOG,100,490.10'
>>> row = line.split(',')
>>> row
['GOOG', '100', '490.10']
>>>
列表可以容纳任何类型的元素。使用 append()
方法添加新元素:
names.append('Murphy') ## 在末尾添加
names.insert(2, 'Aretha') ## 在中间插入
使用 +
来连接列表:
s = [1, 2, 3]
t = ['a', 'b']
s + t ## [1, 2, 3, 'a', 'b']
列表通过整数进行索引,从 0 开始。
names = [ 'Elwood', 'Jake', 'Curtis' ]
names[0] ## 'Elwood'
names[1] ## 'Jake'
names[2] ## 'Curtis'
负索引从末尾开始计数。
names[-1] ## 'Curtis'
你可以更改列表中的任何元素。
names[1] = 'Joliet Jake'
names ## [ 'Elwood', 'Joliet Jake', 'Curtis' ]
获取列表的长度。
names = ['Elwood','Jake','Curtis']
len(names) ## 3
成员测试 (in
, not in
)。
'Elwood' in names ## True
'Britney' not in names ## True
复制 (s * n
)。
s = [1, 2, 3]
s * 3 ## [1, 2, 3, 1, 2, 3, 1, 2, 3]
使用 for
循环来遍历列表中的内容。
for name in names:
## 使用 name
## 例如 print(name)
...
这类似于其他编程语言中的 foreach
语句。
要快速找到某个元素的位置,使用 index()
方法。
names = ['Elwood','Jake','Curtis']
names.index('Curtis') ## 2
如果元素出现不止一次,index()
将返回第一次出现的索引。
如果未找到该元素,它将引发 ValueError
异常。
你可以通过元素值或索引来删除列表中的元素:
## 使用值
names.remove('Curtis')
## 使用索引
del names[1]
删除一个元素不会留下空洞。其他元素会向下移动以填补腾出的空间。如果元素出现不止一次,remove()
只会删除第一次出现的元素。
列表可以进行“原地”排序。
s = [10, 1, 7, 3]
s.sort() ## [1, 3, 7, 10]
## 逆序
s = [10, 1, 7, 3]
s.sort(reverse=True) ## [10, 7, 3, 1]
## 它适用于任何有序数据
s = ['foo', 'bar','spam']
s.sort() ## ['bar', 'foo','spam']
如果你想创建一个新的已排序列表,可以使用 sorted()
:
t = sorted(s) ## s 不变,t 包含已排序的值
注意:列表并非为数学运算而设计。
>>> nums = [1, 2, 3, 4, 5]
>>> nums * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> nums + [10, 11, 12, 13, 14]
[1, 2, 3, 4, 5, 10, 11, 12, 13, 14]
具体来说,列表并不像在MATLAB、Octave、R等语言中那样表示向量/矩阵。不过,有一些包可以帮助你进行相关操作(例如 numpy)。
在本实验中,我们将探索Python的列表数据类型。在上一部分中,你处理过包含股票代码的字符串。
>>> symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'
使用字符串的 split()
操作将其拆分为一个名称列表:
>>> symlist = symbols.split(',')
尝试进行一些查找操作:
>>> symlist[0]
'HPQ'
>>> symlist[1]
'AAPL'
>>> symlist[-1]
'GOOG'
>>> symlist[-2]
'DOA'
>>>
尝试重新赋值一个值:
>>> symlist[2] = 'AIG'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'DOA', 'GOOG']
>>>
进行一些切片操作:
>>> symlist[0:3]
['HPQ', 'AAPL', 'AIG']
>>> symlist[-2:]
['DOA', 'GOOG']
>>>
创建一个空列表并向其中追加一个元素。
>>> mysyms = []
>>> mysyms.append('GOOG')
>>> mysyms
['GOOG']
你可以将列表的一部分重新赋值为另一个列表。例如:
>>> symlist[-2:] = mysyms
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG']
>>>
当你这样做时,左侧的列表(symlist
)会根据需要进行调整大小,以使右侧的列表(mysyms
)能够适配。例如,在上述示例中,symlist
的最后两个元素被 mysyms
中的单个元素替换。
for
循环通过遍历序列(如列表)中的数据来工作。通过输入以下循环并观察发生的情况来查看:
>>> for s in symlist:
print('s =', s)
## 查看输出
使用 in
或 not in
运算符来检查 'AIG'
、'AA'
和 'CAT'
是否在符号列表中。
>>> ## 'AIG' 是否在 `symlist` 中?
True
>>> ## 'AA' 是否在 `symlist` 中?
False
>>> ## 'CAT' 是否不在 `symlist` 中?
True
>>>
使用 append()
方法将符号 'RHT'
添加到 symlist
的末尾。
>>> symlist.append('RHT') ## 追加 'RHT'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>
使用 insert()
方法将符号 'AA'
作为列表中的第二个项目插入。
>>> symlist.insert(1, 'AA') ## 将 'AA' 插入为列表中的第二个项目
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>
使用 remove()
方法从列表中删除 'MSFT'
。
>>> symlist.remove('MSFT') ## 删除 'MSFT'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT']
>>>
在列表末尾追加 'YHOO'
的重复项。
注意:列表中有重复值是完全可以的。
>>> symlist.append('YHOO') ## 追加 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT', 'YHOO']
>>>
使用 index()
方法找到列表中 'YHOO'
的第一个位置。
>>> symlist.index('YHOO') ## 找到 'YHOO' 的第一个索引
4
>>> symlist[4]
'YHOO'
>>>
计算 'YHOO'
在列表中出现的次数:
>>> symlist.count('YHOO')
2
>>>
删除 'YHOO'
的第一次出现。
>>> symlist.remove('YHOO') ## 删除第一次出现的 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'GOOG', 'RHT', 'YHOO']
>>>
需要说明的是,没有方法可以找到或删除一个项目的所有出现。不过,我们将在第2节中看到一种优雅的方法来做到这一点。
想对列表进行排序吗?使用 sort()
方法。试试看:
>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>
想按降序排序吗?试试这个:
>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>
注意:对列表进行排序会“就地”修改其内容。也就是说,列表中的元素会被重新排列,但不会因此创建新的列表。
想把一个字符串列表连接成一个字符串吗?像这样使用字符串的 join()
方法(注意:一开始看起来有点奇怪)。
>>> a = ','.join(symlist)
>>> a
'YHOO,RHT,HPQ,GOOG,AIG,AAPL,AA'
>>> b = ':'.join(symlist)
>>> b
'YHOO:RHT:HPQ:GOOG:AIG:AAPL:AA'
>>> c = ''.join(symlist)
>>> c
'YHOORHTHPQGOOGAIGAAPLAA'
>>>
列表可以包含任何类型的对象,包括其他列表(例如,嵌套列表)。试试看:
>>> nums = [101, 102, 103]
>>> items = ['spam', symlist, nums]
>>> items
['spam', ['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA'], [101, 102, 103]]
仔细观察上面的输出。items
是一个包含三个元素的列表。第一个元素是一个字符串,但其他两个元素是列表。
你可以通过使用多个索引操作来访问嵌套列表中的元素。
>>> items[0]
'spam'
>>> items[0][0]
's'
>>> items[1]
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>> items[1][1]
'RHT'
>>> items[1][1][2]
'T'
>>> items[2]
[101, 102, 103]
>>> items[2][1]
102
>>>
尽管从技术上讲可以创建非常复杂的列表结构,但一般来说,你要保持简单。通常列表包含的元素都是同一种类型的值。例如,一个完全由数字组成的列表或一个文本字符串列表。在同一个列表中混合不同类型的数据通常会让你头疼不已,所以最好避免这样做。
恭喜你!你已经完成了实验(Lab)中的列表部分。你可以在LabEx中练习更多实验来提升你的技能。