Python基础语法学习:列表和元组

前面学变量的时候,一个变量基本对应一个数据。

例如:

python 复制代码
num1 = 10
num2 = 20
num3 = 30

数据少的时候这样写没什么问题,但如果一下子有几十个、几百个数据,再一个个创建变量就很麻烦。

这时候就需要一种能够批量保存数据的结构。

Python 中很常见的就是:

列表 list 和元组 tuple。


一、什么是列表

列表可以理解成一个"数据容器"。

例如:

python 复制代码
alist = [1, 2, 3, 4]

一个列表里可以保存多个元素。

而且 Python 的列表比较灵活,不要求里面所有元素都是同一种类型:

python 复制代码
alist = [1, 'hello', True]

这种写法也是合法的。

创建空列表:

python 复制代码
alist = []

也可以:

python 复制代码
alist = list()

二、通过下标访问列表

Python 的列表和 C++ 数组一样,都支持下标访问。

例如:

python 复制代码
alist = [1, 2, 3, 4]
print(alist[2])

输出:

text 复制代码
3

因为 Python 的下标从 0 开始:

text 复制代码
下标 0 → 1
下标 1 → 2
下标 2 → 3
下标 3 → 4

不仅可以读取,还可以通过下标修改:

python 复制代码
alist[2] = 100

三、列表长度和负数下标

使用:

python 复制代码
len(alist)

可以得到列表中的元素个数。

如果:

python 复制代码
alist = [1, 2, 3, 4]

那么有效下标是:

text 复制代码
0 ~ 3

超出范围就会抛出异常。

Python 还有一个很方便的功能:

负数下标。

例如:

python 复制代码
print(alist[-1])

表示最后一个元素。

也就是:

python 复制代码
alist[-1]

等价于:

python 复制代码
alist[len(alist) - 1]

所以:

text 复制代码
-1 → 倒数第1个
-2 → 倒数第2个
-3 → 倒数第3个

四、切片

如果只想拿一个元素,可以使用下标。

如果想一次拿出一段连续的数据,就可以使用切片。

基本写法:

python 复制代码
alist[开始:结束]

例如:

python 复制代码
alist = [1, 2, 3, 4]

print(alist[1:3])

结果:

text 复制代码
[2, 3]

这里的范围是:

text 复制代码
[1, 3)

也就是包含下标 1,不包含下标 3。

这个规则和 range() 一样,也是左闭右开。


五、切片可以省略边界

例如:

python 复制代码
alist = [1, 2, 3, 4]

print(alist[1:]) # [2, 3, 4]

表示从下标 1 一直到列表结尾。

python 复制代码
print(alist[:-1]) # [1, 2, 3]

表示从开头取到最后一个元素之前。

而:

python 复制代码
print(alist[:]) # [1, 2, 3, 4]

可以得到整个列表。


六、切片还可以设置步长

完整的切片形式是:

python 复制代码
alist[start:end:step]

第三个参数就是步长。

例如:

python 复制代码
alist = [1,2,3,4,5,6,7,8,9,10]

print(alist[::2]) # [1, 3, 5, 7, 9]

就是隔一个元素取一个。

也可以使用负数步长:

python 复制代码
print(alist[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

可以把列表倒过来。

而且切片的边界即使超出范围,一般也不会直接报错,而是尽可能取出符合要求的元素。


七、遍历列表

列表最常见的操作之一就是遍历。

最简单的方法是:

python 复制代码
alist = [1, 2, 3, 4]

for elem in alist:
    print(elem)

这样就能一个一个取出元素。

也可以通过下标:

python 复制代码
for i in range(0, len(alist)):
    print(alist[i])

还可以使用 while:

python 复制代码
i = 0

while i < len(alist):
    print(alist[i])
    i += 1

八、向列表中添加元素

最常用的是 append:

python 复制代码
alist = [1, 2, 3, 4]

alist.append('hello')

print(alist)

它会把元素放到列表末尾。


九、insert插入元素

如果不想放在末尾,而是想放到指定位置,可以使用:

python 复制代码
alist.insert(1, 'hello')

第一个参数表示插入位置的下标。

这里还出现了一个概念:

方法(method)

例如:

python 复制代码
alist.append()
alist.insert()

这些方法都依附于 alist 这个对象。

可以简单理解成:

text 复制代码
函数:独立存在
方法:依附于某个对象

十、查找列表元素

判断某个元素是否存在,可以使用:

python 复制代码
2 in alist

返回的是布尔值:

text 复制代码
True
False

例如:

python 复制代码
alist = [1, 2, 3, 4]

print(2 in alist) # True
print(10 in alist) # False

也可以用:

python 复制代码
alist.index(2)

查找元素所在的下标。

如果元素不存在,index 会抛出异常。


十一、删除元素

删除列表元素有几种常见方式。

pop()

删除最后一个元素:

python 复制代码
alist.pop()

也可以指定下标:

python 复制代码
alist.pop(2)

remove()

按照元素值删除:

python 复制代码
alist.remove(2)

这里删除的是值为 2 的元素。

所以:

text 复制代码
pop → 按位置删
remove → 按值删

十二、列表拼接

两个列表可以直接使用 +:

python 复制代码
alist = [1, 2, 3, 4]
blist = [5, 6, 7]

print(alist + blist)

这里会生成一个新的列表,原来的两个列表不会被修改。

也可以使用:

python 复制代码
alist.extend(blist)

这样是把 blist 中的数据添加到 alist 末尾。

text 复制代码
alist 会被修改
blist 不会被修改

十三、元组是什么

元组和列表非常像。

列表:

python 复制代码
alist = [1, 2, 3]

元组:

python 复制代码
atuple = (1, 2, 3)

最重要的区别只有一个:

列表可以修改,元组不能修改。

例如:

python 复制代码
alist[0] = 100

可以。

但是:

python 复制代码
atuple[0] = 100

不可以。


十四、元组支持哪些操作?

虽然元组不能修改,但是很多"读操作"还是支持的。

例如:

text 复制代码
下标访问
切片
遍历
in
index
+

都可以使用。

但是这些修改操作不能用:

text 复制代码
修改元素
新增元素
删除元素
extend

十五、为什么有了列表还需要元组?

既然列表这么灵活,为什么还需要元组?

主要有两个方面。

第一,元组不可修改。

如果一个函数接收到列表,而你又不能确定这个函数内部会不会修改它,那么传递元组会更加安全。

第二,后面学习字典的时候会接触哈希。

字典的 key 必须是可哈希对象,而可哈希的前提之一就是不可变,所以元组可以作为字典的 key,列表则不能。

另外,Python 中函数返回多个值的时候,经常就是返回一个元组:

python 复制代码
def getPoint():
    return 10, 20

result = getPoint()

这里 result 实际上就是一个元组。


十六、列表和元组怎么选?

可以直接这么理解:

text 复制代码
数据需要修改 → 列表
数据不希望修改 → 元组

两个都是 Python 中非常常用的序列类型,核心操作都围绕下标、切片和遍历展开。


相关推荐
可乐鸡翅yeah_1 小时前
新手梳理:HLS 线上问题,哪些该提给 CDN,哪些该找后端切片服务
开发语言·前端·javascript·vue.js·网络协议·http·m3u8在线
zwd20051 小时前
Manim arrange 和 arrange_in_grid 用法详解:buff、aligned_edge、rows/cols(0.21.0 实测)
前端·python·edge
JWASX1 小时前
Java 转 go 学习 - 接口
学习·golang
外收内放1 小时前
Python基础语法练习题(拓展2)
python·pygame
by209991 小时前
list 的使用:把节点、位置和操作联系起来的综合叙述(上)
数据结构·c++·笔记·list
I Am a robert girl1 小时前
从零读懂世界模型的持续学习:一份组合式基准的源码级拆解
学习·具身智能·持续学习·灾难性遗忘·机器人学习·世界模型·组合式基准
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞草莓蛋糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
扶风ff1 小时前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
为啥全要学1 小时前
大模型流式输出过滤敏感词
开发语言·python