Python 教程 - 列表

创建列表

列表是 Python 中用于存储一系列元素的数据结构,列表中的元素可以是字符串、数字、布尔值、其他列表、字典等。在 Python 中,有三种方法可以创建列表:使用方括号、list() 函数和 split() 函数切分字符串。

方括号

将元素放在方括号内,用逗号分隔,即可创建一个列表。通常我们会将列表赋值给一个变量。例如,a 是一个字符串列表,b 是一个数字列表,c 是一个包含字符串、数字和列表的列表。

bash 复制代码
a = ['apple','banana','orange']
b = [1,2,3,4,5]
c = ['apple',1,2,3,['dog','cat']]
print(type(a))   # <class 'list'>
print(type(b))   # <class 'list'>
print(type(c))   # <class 'list'>

list() 函数

list()函数可以创建一个空列表,或者将可迭代的数据(如元组、字符串、集合或字典)转换成列表。,下方的例子 b 会将元组成列表,c 是空的列表,d 则是将 apple 字符串转成成五个字符串的列表。

scss 复制代码
a = ('apple','banana','orange')
b = list(a)  # 元组转换成列表
c = list()  # 创建一个空列表
d = list('apple') # 字符串转换成列表
print(b)   # ['apple', 'banana', 'orange']
print(c)   # []
print(d)   # ['a', 'p', 'p', 'l', 'e']

split() 函数

split() 函数可以根据指定的分隔符将字符串分割成列表。下图的例子,会根据 . 符号,将字符串切分成列表,由于有多个 . 在一起,拆分时会出现空的字符串元素。

css 复制代码
a = 'apple...banana...orange'
b = a.split('.')  # 根据'.'分隔符分割字符串
print(b)   # ['apple', '', '', 'banana', '', '', 'orange']

合并列表

合并列表有两种方法:使用 + 运算符和 extend() 方法。

使用 + 号

使用 + 运算符可以将两个列表合并,类似于字符串的拼接。在 + 号右方的列表中的元素会追加在左方列表的后面。

css 复制代码
a = ['a1','a2','a3']
b = ['b1','b2','b3']
c = a + b
print(c)   # ['a1', 'a2', 'a3', 'b1', 'b2', 'b3']

extend() 函数

extend()函数可以将一个列表的内容添加到另一个列表的末尾。

css 复制代码
a = ['a1','a2','a3']
b = ['b1','b2','b3']
a.extend(b)
print(a)   # ['a1', 'a2', 'a3', 'b1', 'b2', 'b3']

注意: extend()方法会改变原列表,但不返回新列表 ,所以如果写成 c = a.extend(b)c 将会是 None

css 复制代码
a = ['a1','a2','a3']
b = ['b1','b2','b3']
c = a.extend(b)
print(c)   # none

获取列表元素

要使用列表,我们需要读取列表中的内容,Python 提供了两种方法来读取列表元素:通过索引和切片。

使用索引获取元素

列表中的每个元素都有一个索引号,通过索引可以直接访问元素。列表中第一个元素的索引为0,第二个 offset 为 1,依此类推,下面的例子,会依序读取并印出列表中的元素。

css 复制代码
a = ['apple','banana','orange']
print(a[0])   # apple
print(a[1])   # banana
print(a[2])   # orange

索引也可以从右侧开始计数,第一个元素的索引为 -1,第二个元素为 -2,依此类推。

css 复制代码
a = ['apple','banana','orange']
print(a[-1])   # orange
print(a[-2])   # banana
print(a[-3])   # apple

如果列表中有列表,就构成了「多维列表」,读取元素时如果有第二层,就多一个中括号加上索引值,就能读取第二层的元素。

css 复制代码
a = ['apple','banana','orange',['dog','cat']]
print(a[3][0])   # dog
print(a[3][1])   # cat

使用切片获取元素

切片可以用来获取列表中的一部分元素。切片的语法是在中括号内使用冒号:,在冒号的前后放入指定的索引,就能取出指定范围的数据 ( 第一个 offset : 第二个 offset - 1 ),如果不指定数值,冒号前方默认为 0,冒号后方默认为 -1。

范围也可以使用「负数」,表示从右侧开始,但要注意第一个值的顺序 (不论正负) 都必须要在第二个值的前面,不然就读取不到数据 ( 会返回空的结果 )。

scss 复制代码
a = [0,1,2,3,4,5,6,7,8,9]
b = a[:3]
c = a[3:]
d = a[1:3]
e = a[-5:-2]
print(b)   # [0, 1, 2]  取得 0~(3-1) 项
print(c)   # [3, 4, 5, 6, 7, 8, 9]  取得 3~最后一项
print(d)   # [1, 2]  取得 1~(3-1) 项
print(e)   # [5, 6, 7]  取得倒数第 5 项~(倒数第二项-1)

如果使用两个冒号 :: ,表示要间隔几个元素取值 ,例如 ::2 就是间隔两个元素,::3 就是间隔三个元素,如果是负数,就是从右侧取值,因此 ::-1 就可以让反转整个列表

ini 复制代码
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = a[::3]  # 每隔三个元素取一个
c = a[3::2]  # 从第三个元素开始,每隔两个元素取一个
d = a[::-1]  # 反转列表
e = a[::-2]  # 反转列表,每隔两个元素取一个
print(b)   # [0, 3, 6, 9]
print(c)   # [3, 5, 7, 9]
print(d)   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(e)   # [9, 7, 5, 3, 1]

复制列表

可以使用列表的切片[:]来复制整个列表,或者通过赋值来复制列表。下方的程序码展示两种复制列表的方式,如果使用 b=a 的做法,虽然看起来像是复制了,但实际上 a 和 b 指向了同一个列表 ,所以当 a 删除了一个元素时,b 也会跟着改变,然而如果使用 d=c[:] 的方式,会创建一个 全新 的列表,当 c 发生改变时,不会影响 d。

css 复制代码
a = [1, 2, 3]
b = a
del(a[1])    # 删除 a 的第二个元素
print(a)     # [1, 3]
print(b)     # [1, 3]

c = [1, 2, 3]
d = c[:]     # 复制 c 的所有元素变成一个新列表
del(c[1])    # 删除 c 的第二个元素
print(c)     # [1, 3]
print(d)     # [1, 2, 3]

修改列表元素

列表的内容是可以修改的。可以通过索引或切片来修改元素。

使用索引修改元素

通过索引可以直接修改元素。

css 复制代码
a = ['apple', 'banana', 'orange']
a[0] = 'grap'  # 修改第一个元素

使用切片修改元素

切片可以用来快速替换列表中的一段元素。下方的程序会将第 b、c、d 这三个元素更换为 100、200、300。

css 复制代码
a = ['a','b','c','d','e']
a[1:4] = [100,200,300]
print(a)    # ['a', 100, 200, 300, 'e']

指定更换的元素的数量,不一定要和原本的数量一样多 (可以比较少,也可以比较多),更换后会将范围的内容,完全替换成新的内容。

css 复制代码
a = ['a','b','c','d','e']
a[1:4] = [1,2,3,4,5,6,7,8,9]
print(a)   # ['a', 1, 2, 3, 4, 5, 6, 7, 8, 9, 'e']

**替换的内容不一定要是列表,只要是可以「迭代」的内容,**例如字符串、元组,都可以将其替换进入列表中,下方的程序将 1~4 的位置换成 hello 字符串,替换后 hello 字符串会被拆分成一个个的字母。

css 复制代码
a = ['a','b','c','d','e']
a[1:4] = 'hello'
print(a)    # ['a', 'h', 'e', 'l', 'l', 'o', 'e']

添加列表元素

Python 提供两种列表添加元素的方法:append() 和 insert()

append()

append() 函数可以将元素添加在一个列表的末尾,如果添加的是一个列表,会原封不动的变成一个新元素 。

css 复制代码
a = ['a','b','c','d','e']
a.append(100)
b = ['a','b','c','d','e']
b.append([100,200,300])
print(a)   # ['a', 'b', 'c', 'd', 'e', 100]
print(b)   # ['a', 'b', 'c', 'd', 'e', [100, 200, 300]]

insert()

如果已经知道要添加的位置,使用 insert() 函数,就可以将指定的内容,从指定的位置插入,如果插入的位置设置为 0,会将内容插入在列表的开头,如果设定的位置大于列表长度,就会插入在尾端 (如果设定 -1,会插入在倒数第二个)。

scss 复制代码
a = ['a','b','c','d','e']
a.insert(3,100)
b = ['a','b','c','d','e']
b.insert(0,100)
c = ['a','b','c','d','e']
c.insert(100,100)
d = ['a','b','c','d','e']
d.insert(-1,100)
print(a)   # ['a', 'b', 'c', 100, 'd', 'e']
print(b)   # [100, 'a', 'b', 'c', 'd', 'e']
print(c)   # ['a', 'b', 'c', 'd', 'e', 100]
print(d)   # ['a', 'b', 'c', 'd', 100, 'e']

删除列表元素

Python 提供了四种方法,来删除列表的数据:del、remove()、pop() 和 clear()

del

如果已经知道删除元素的位置,就能够「使用 del list(索引值)」 来删除指定的元素,同样支持中括号切片的语法 ,可以删除某个范围的元素,当元素被删除时,后面的元素会往前平移,取代原本的位置。

css 复制代码
a = [0,1,2,3,4,5,6,7,8,9]
del a[2]
b = [0,1,2,3,4,5,6,7,8,9]
del b[2:6]
print(a)   # [0, 1, 3, 4, 5, 6, 7, 8, 9]
print(b)   # [0, 1, 6, 7, 8, 9]

remove()

如果不知道删除元素的位置,可以使用「remove(元素内容)」删除该元素,如果有多个同样内容的元素,remove() 只会删除第一个找到的元素

css 复制代码
a = ['apple','apple','banana','orange']
a.remove('apple')
print(a)   # ['apple', 'banana', 'orange']

pop()

pop() 函数可以取出并移除 列表里的一个元素,使用的方式为「pop(索引值)」,如果不指定数值或数值为 -1,则会取出最后一个元素,取出的元素如果没有赋值给变量,这些元素就会消失。

css 复制代码
a = [0,1,2,3,4,5]
b = a.pop(2)
print(a)   # [0, 1, 3, 4, 5]
print(b)   # 2

clear()

clear() 函数会清空整个列表的内容,使其变成一个空的列表。

css 复制代码
a = [0,1,2,3,4,5]
a.clear()
print(a)   # []
相关推荐
在下不上天5 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS9 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
EterNity_TiMe_14 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
Suyuoa25 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
Iced_Sheep38 分钟前
干掉 if else 之策略模式
后端·设计模式
XINGTECODE1 小时前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
程序猿进阶1 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺1 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端
好看资源平台1 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
凡人的AI工具箱2 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang