列表,元组,字典

有的时候,代码中需要表示的数据是非常多的,甚至也不知道要去保存多少个数据,这个时候,就需要用到列表

列表是一种让程序员在代码中批量表示/保存数据的方式

元组的设定和列表是非常相似的,只是列表中存放的元素是可以进行增加删除和修改的,而元组中的元素是在元组创建的时候就设定好的,不能进行修改调整

创建列表

复制代码
alist = []

blist = list()

print(type(alist), type(blist))

如果需要放初始值,可以直接写在[]中, 列表中存放的元素是允许是不同类型的数据, 也是可以通过下标进行访问的

切片操作

通过下标操作是一次取出里面的第一个元素

通过切片,则是一次取出连续的元素,相当于得到一个子列表

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

切片操作中是可以省略前后边界的

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

切片操作还可以指定步长,也就是每访问一个元素后,下标自增几步

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

切片操作的步长还可以是负数,此时是从后往前的取元素,每取一个元素后下标自减几步

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

在Python中如果切片中的数字填写的越界的,是不会有负面效果的,只是会尽可能的把满足条件的元素切片

遍历列表中的元素

复制代码
alist = [1, 2, 3, 4, 5]
for i in alist:
    print(i)

for i in range(0, len(alist)):
    print(alist[i])

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

新增元素

使用append方法向列表末尾中插入一个元素(尾差)

复制代码
alist = [1, 2, 3, 4, 5]
alist.append(6)
print(alist)

使用Insert方法,向任意位置插入一个元素

复制代码
alist = [1, 2, 3, 4, 5, 6]
alist.insert(1,'hello')
print(alist)

查找元素

使用的是 in 操作符,判定元素是否在列表中存在,返回的是布尔类型

复制代码
alist = [1, 2, 3, 4, 5, 6]
print(1 in alist)
print(2 in alist)
print(9 in alist)

使用index方法,查找元素在列表中下标,返回值是一个整数,如果元素不存在是会抛出异常的

复制代码
alist = [1, 2, 3, 4, 5, 6]
print(alist.index(3))
print(alist.index(199))

删除元素

使用 pop 的方法删除最末尾的元素

pop 也能根据下标来删除

复制代码
alist = [1, 2, 3, 4, 5, 6]
print(alist.pop())
print(alist.pop(2))

使用 remove 方法,按照值删除元素

复制代码
alist = [1, 2, 3, 4, 5, 6]
alist.remove(3)
print(alist)

连接列表

复制代码
alist = [1, 2, 3, 4, 5, 6]
blist = [8, 9, 10, 11, 12]
print(alist)
print(blist)
print(alist + blist)

使用 extend 方法,相当于把一个列表拼接到另一个列表的后面

a.extend(b),是把 b 中的内容拼接到 a 的末尾,但是是不会修改 b,但是会修改 a

复制代码
alist = [1, 2, 3, 4, 5, 6]
blist = [8, 9, 10, 11, 12]
alist.extend(blist)
print(alist)
print(blist)

元组和列表基本是差不多的

元组不能修改里面的元素,列表是可以修改里面的元素的

像,读操作,比如访问下标,切片,遍历,in,index,+等操作元组也是一样支持的,但是像写操作,比如修改元素,增加,删除,extend等,元组不能支持

字典

字典是什么?

字典是一种存储 键值对 的结构,底层的逻辑是哈希表

键值对就是把 键(key) 进行一个一个的一一对应 , 然后就可以根据键获取到相对应的值

创建字典

也可以在创建字典的时候就给改字典附上初始值

复制代码
student = {'name': 'Tom', 'age': 20, 'gender': 'Male'}
print(student)

查找key

使用 in 可以判断 key 是否在字典中存在,返回布尔值

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}
print("name" in student)

使用[]通过类似于取下标的方式,获取到元素的值,只不过此处的"下标"是key

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}
print("name" in student)
print(student["name"])

如果 key 不在字典中会抛出异常

新增或者是修改元素

使用[] 可以根据 key 来新增/修改 value

如果 key 不存在,对取下标操作赋值,即为新增加的键值对

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}
student["grade"] = 95
print(student)

student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}
student["id"] = 1
print(student)

删除元素

使用 pop 方法根据 key 删除对应的键值对

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}
student.pop("gender")
print(student)

遍历字典中的元素

直接使用 for 循环能够获取到字典中的所有的key,进一步就可以取出所有的值

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}

for key in student:
    print(key, student[key])

取出所有的key和value

使用keys方法可以获取到字典中的所有的 key

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}

print(student.keys())

使用values方法也可以获取到字典中的所有value

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}

print(student.values())

使用items方法可以获取到字典中的所用的键值对

复制代码
student = {
    "name": "Tom",
    "age": 22,
    "gender": "male"
}

print(student.items())

合法的key类型

不是所有的类型都是可以作为字典的key

字典本质上是一个 哈希表,哈希表的key要求是"可哈希的",也就是可以计算出一个哈希值

使用 hash 函数计算某个对象的哈希值

但凡能计算出哈希值的类型,都可以作为字典的key

相关推荐
石去皿5 分钟前
大模型面试通关指南:28道高频考题深度解析与实战要点
人工智能·python·面试·职场和发展
jasligea15 分钟前
构建个人智能助手
开发语言·python·自然语言处理
kokunka19 分钟前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
测试秃头怪32 分钟前
面试大厂就靠这份软件测试八股文了【含答案】
自动化测试·软件测试·python·功能测试·面试·职场和发展·单元测试
测试杂货铺32 分钟前
软件测试面试题大全,你要的都在这。。
自动化测试·软件测试·python·功能测试·面试·职场和发展·测试用例
测试大圣33 分钟前
软件测试基础知识总结(超全的)
软件测试·python·功能测试·测试工具·职场和发展·单元测试·测试用例
sww_10261 小时前
RAG检索增强 ETL最佳实战
人工智能·python·spring
云栖梦泽1 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言
java1234_小锋1 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
铅笔侠_小龙虾1 小时前
Flutter Demo
开发语言·javascript·flutter