我是基于 deepseek v3 的 AI 助手
本文主要介绍了Python中的几种常见容器类型及其操作方法。首先,文章详细讲解了列表(list)的使用,包括如何创建列表、列表的切片操作、以及列表的增删改查方法。列表可以存储不同类型的数据,且通过切片操作可以方便地访问和修改列表中的元素。接着,文章介绍了元组(tuple),元组与列表类似,但元组是不可变的,只能进行查询操作。 随后,文章探讨了字典(dict)的使用,字典是一种高效的哈希结构,通过键值对存储数据。文章还展示了如何将列表和元组转换为字典,并介绍了字典的增删改查操作。最后,文章介绍了集合(set),集合是无序且不重复的数据结构,支持添加、删除等操作,但不支持修改和索引访问。 文章还总结了Python中常用的通用方法,如`print()`、`len()`、`max()`等,并详细介绍了列表、元组、字典和集合的增删改查方法。通过这些方法,用户可以灵活地操作这些容器类型,满足不同的编程需求。 总的来说,本文为Python初学者提供了关于容器类型的全面指南,帮助读者理解并掌握如何在Python中高效地使用列表、元组、字典和集合。
# 容器类型
# 列表
list1 = [1,2,3,4,5] | |
list2 = ["a",1,2,"c"] |
python 中的 list 可以存储相同 (list1) 或不同的数据 (list2)
列表结构类似于 C++ 的数组,但区别是 python 列表存放的是指针
如果你认真看了第 4 篇,那你应该知道 python 中的变量大部分都是指针
这里有一段代码:
list1 = [1,2,3,4] | |
list2 = list1 | |
list1.append(5) | |
print(list2) # 会输出什么? |
答案是 [1, 2, 3, 4, 5] , 这里就是 python 的一个坑了,list2 在目标改变后并不会改变指针 (或者说指向 list1 这个目标没有改变)
所以 list1 会与 list2 同步
解决方法就是使用下面的方法:
list1 = [1,2,3,4] | |
list2 = list1[::] # 在目标列表后加一个 [::] | |
list1.append(5) | |
print(list2) |
切片同样适用于列表, [::] 表示返回所有内容
list1 = [[1,2],[1,2]] |
list1 就是一个 二维列表 ,访问第一个列表的第二个数据需要使用下列方法:
list1[0][1] |
# 切片补充
切片可以使用 list[索引] 来返回特定位置的数据
同样可以使用切片来更改数据:
list1 = [1, 2, 3, 4] | |
list1[0] = 7 | |
print(list1) # [7, 2, 3, 4] | |
# 更改多个数据 | |
list1 = [1, 2, 3, 4] | |
list1[0:2] = [7,8] | |
print(list1) # [7, 8, 3, 4] |
更改多个数据等号后必须为可迭代数据
python 的切片含头不含尾
# 成员判断符
在 python 中可以使用 in 来判断元素是否位于目标容器中
list1 = [1,2,3] | |
if 1 in list1: | |
print("yes") | |
else: | |
print("no") | |
# 输出 yes |
# 元组
tuple1=(1,2,3) | |
tuple2=("a",1,2,"b") |
python 中的元组 (tuple) 与 list 基本一致,但元组内的数据不可变
列表基本操作增删改查元组只支持查,举个栗子:
tuple1 = (1,2,3) | |
tuple1[0] = 2 | |
print(tuple1) | |
# 在第 2 行会报错:TypeError: 'tuple' object does not support item assignment |
增删改查的方法会在后面的部分讲到
# 字典
dict1 = {"a":1,"b":2} | |
print(dict1["a"]) |
字典是一种哈希结构,查询效率非常高 (接近 O (1))
字典通过键值对来储存对象,像 dict1 中, "a" 对应 1
列表和元组都可以转换为字典
列表转为字典:
list1 = [["a",1],["b",2]] | |
print(dict(list1)) # {'a': 1, 'b': 2} |
二维嵌套列表的 0 位为键,1 位为值
例如第一个键值对中 a 为键, 1 为值
对字典添加或赋值:
dict1 = {"a": 1} | |
dict1["b"] = 2 # 左侧为键,右侧为值 | |
print(dict1) |
# 集合
set1 = {"apple","banana","orange"} | |
print(set1) # 输出 {'orange', 'banana', 'apple'} |
集合是无序、无索引的,不可以执行改这个操作
set1 = {3,4,1,2,3,5} | |
print(set1) |
集合会自动对数字进行排序,去除重复项
# 常用方法
# 通用方法
print() input() 控制台的输出 / 入
len() 返回参数的长度 (仅可用于可迭代对象)
max() min() 返回参数的最大 / 小值
str() int()...(对应的类型名称) 把对象转换为对应类型
type() 返回对象类型
del obj 删除对象 (全局命令)
# 容器类型方法
# 列表,元组
元组仅适用于查询
# 增加
append() 在末尾添加一个元素,能且只能添加一个元素
extend() 在末尾添加多个元素,必须以可迭代形式填入
insert() 在指定位置添加一个元素,可迭代元素会以嵌套的形式填入
如果在添加方法内添加本身,会发生什么?
list1 = [1,2,3] | |
list1.append(list1) | |
print(list1) | |
list1 = [1,2,3] | |
list1.extend(list1) | |
print(list1) | |
list1 = [1,2,3] | |
list1.insert(-1,list1) | |
print(list1) |
输出如下:
[1, 2, 3, [...]] | |
[1, 2, 3, 1, 2, 3] | |
[1, 2, [...], 3] |
可以看出,extend 会解包列表并填入,而 append 和 insert 会加入 ... 来避免一直添加
这个 ... 别名 Ellipsis, 是 python 里的特殊数据类型
# 删除
remove() 删除列表中的指定值,不存在会返回错误
pop() 删除列表中的指定索引 (不指定删除 - 1 位元素), 并返回这个元素
del 对象[索引] 删除指定索引的元素,索引超出列表会报错
clear() 情空整个列表
# 修改
对象[索引] = 变量 修改指定索引的元素
sort() 对列表进行排序
# 查询
index() 返回查询值的索引,不存在会报错
count() 统计固定值的出现次数
# 字典
# 增加,修改
dict[键]=值 对指定对象赋值 (不存在创建新键值对)
update() 使用键值对更新字典
字典和列表的复制一样,需要使用 copy 进行复制
# 删除
pop() 删除指定键的键值对
popitem() 删除最后添加的项目 (3.7 之前会删除随机项目)
del dict[键] 删除指定键的键值对
clear() 清除这个字典
# 查询
get() 获取指定键的值
values() keys() 获取所有的键 / 值
items() 返回所有键值对
# 集合
# 增加
add() 添加一个元素
update() 添加多个元素 (可迭代)
# 删除
remove() 删除列表中的指定值,不存在会返回错误
discard() 删除列表中的指定值,不会返回错误
pop() 删除并返回随机元素
clear() 清除这个集合
集合只能遍历,无法查询和使用索引
