Python 列表基础介绍

PythonPythonBeginner
立即练习

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(',')

练习1.19:提取和重新赋值列表元素

尝试进行一些查找操作:

>>> 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 中的单个元素替换。

练习1.20:遍历列表项

for 循环通过遍历序列(如列表)中的数据来工作。通过输入以下循环并观察发生的情况来查看:

>>> for s in symlist:
        print('s =', s)
## 查看输出

练习1.21:成员测试

使用 innot in 运算符来检查 'AIG''AA''CAT' 是否在符号列表中。

>>> ## 'AIG' 是否在 `symlist` 中?
True
>>> ## 'AA' 是否在 `symlist` 中?
False
>>> ## 'CAT' 是否不在 `symlist` 中?
True
>>>
✨ 查看解决方案并练习

练习1.22:追加、插入和删除项目

使用 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节中看到一种优雅的方法来做到这一点。

练习1.23:排序

想对列表进行排序吗?使用 sort() 方法。试试看:

>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>

想按降序排序吗?试试这个:

>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>

注意:对列表进行排序会“就地”修改其内容。也就是说,列表中的元素会被重新排列,但不会因此创建新的列表。

练习1.24:将所有内容整合起来

想把一个字符串列表连接成一个字符串吗?像这样使用字符串的 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'
>>>

练习1.25:包含任何内容的列表

列表可以包含任何类型的对象,包括其他列表(例如,嵌套列表)。试试看:

>>> 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中练习更多实验来提升你的技能。