Python 列表与字典:查询、修改和推导式
整理列表与字典的常见操作,补充索引、键缺失和可变对象共享等使用边界,帮助从语法记忆转向数据处理。
四. 列表
为什么需要列表
-
变量可以存储一个元素,而列表是一个“大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作
-
列表相当于其它语言中的数组
-
列表示意图

1. 列表的创建与删除
-
列表的创建
-
列表需要使用中括号[],元素之间使用英文的逗号进行分隔
lst = ['hello','python'] -
列表的创建方式
//使用中括号 lst = ['hello','python'] //使用内置函数list() lst2 = list(['hello','python'])
-
-
列表的特点
-
列表元素按顺序有序排序
-
索引映射唯一个数据
索引正序是从0开始
索引倒叙从-1开始
-
列表可以存储重复数据
-
任意数据类型混存
-
根据需要动态分配和回收内存
-
2. 列表的查询操作
-
获取列表中指定元素的索引 index()
- 如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
- 如果查询的元素在列表中不存在,则会抛出ValueError
- 还可以在指定的start和stop之间进行查找
-
获取列表中的单个元素
- 正向索引从0到N-1举例: Ist[0]
- 逆向索引从-N到-1举例:Ist[-N]
- 指定索引不存,抛出IndexError
-
查询多个元素

lst = list(range(1,10))
print("原列表",lst)
lst1 = lst[0:2:1] #lst[start:stop:step] 从索引0开始,到索引stop结束,不包含stop 步长为step 产生一个新的列表
print(lst1)
lst2 = lst[2:8:2]
print(lst2)
"""如果步长step为负数,则从最后一个元素开始切片"""
lst3 = lst[::-1] #排序修改为倒排
print(lst3)
lst4 = lst[5:1:-1] #从索引为5的元素开始倒排切片,到索引为1的元素,不包含索引为1的元素
print(lst4)
3. 列表元素的增删改操作
-
增加操作
方法/其他 操作描述 append() 在列表的末尾添加一个元素 extend() 在列表的末尾至少添加一个元素 insert() 在列表的任意位置添加一个元素 切片 在列表的任意位置添加至少一个元素
lst.append(20) #向列表的末尾添加一个元素
lst.append(30) #向列表的末尾添加一个元素
print(lst)
lst.extend([50,60]) #向列表的末尾至少添加一个元素,添加的是列表
print(lst)
lst.insert(3,50) #向列表任意位置添加元素 第一个参数是索引 第二个是元素
print(lst)
lst.insert(-1,55)
print(lst)
temp = lst[5:10:2]
print(temp)
- 删除操作
| 方法/其他 | 操作描述 |
|---|---|
| remove() | 一次删除一个元素 重复元素只删除第一个 元素不存在抛出ValueError |
| pop() | 删除一个指定索引位置上的元素 指定索引不存在抛出IndexError 不指定索引,删除列表中最后一个元素 |
| clear() | 清空列表 |
| 切片 | 一次至少删除一个元素 |
| del | 删除列表 |
lst = [10,20,30,50,410,10,20,35,5,40]
lst.remove(10) #删除指定元素。如果有重复的,则删除第一个
print(lst)
# lst.remove(222) #如果删除的元素不存在,则抛出ValueError异常
lst.pop(2) #删除指定索引位置的元素
print(lst)
lst.pop(-1)
print(lst)
lst.pop() #如果不指定索引,则会删除列表最后一个元素
print(lst)
print(id(lst))
lst = lst[1:3] #会产生新的列表对象
lst[1:3]=[] #不产生新的列表对象
print(lst)
print(id(lst))
lst.clear() #清除列表中得元素
del lst #删除列表
- 修改操作
类似java的数组赋值操作
4. 列表元素的排序
- 调用sort()方法,列有中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排序
- 调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变
lst = [10,50,30,20,40]
lst.sort() #升序排序
print(lst)
print(id(lst))
lst.reverse() #降序排序
lst.sort(reverse=True) #降序排序
lst.sort(reverse=False) #升序排序
print(lst)
print(id(lst))
"""以上排序方法不会产生新的列表对象"""
lst1 = [10,50,30,20,40]
result = sorted(lst1,reverse=True) #使用内置方法排序,会产生一个新的列表对象
print(lst1)
print(result)
5. 列表推导式

lst = [i for i in range(1,10)] #自定义生成列表
print(lst)
lst = [i*i for i in range(1,10)] #自定义生成列表
print(lst)
五.字典
1. 什么是字典(java中的map)
- Python内置的数据结构之一,与列表一样是一个可变序列
- 以键值对的方式存储数据,Python 3.7 起字典按语言保证保留插入顺序,字典仍是按键访问的映射

2. 字典的原理
元素存入字典得时候,会将key进行hash运算,将得到得hash值存入字典。
取值得时候,通过计算key的hash值,去字典中查询
3.字典的创建和删除
-
创建
//使用花括号 scores = {"name":"张三","age":20} //使用内置函数dict() dict(name="张三",age=20) -
删除
scores.pop(key) //删除指定键 scores.clear() //清空整个字典
4.字典的查询操作
- 使用[] :scores['name']
- 使用get()方法: scores.get('name')
[] 和get()的区别:
- []如果字典中不存在指定的key,抛出keyError异常
- get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None,可以通过参数设置默认的value,以便指定的key不存在时返回
mymap = {"userName":"张三","userAge":20,"height":175.5}
print(mymap.get("userName"))
# print(mymap["userName1"]) #如果键不存在,则会抛出KeyError异常
user = dict(name="二狗",age=2)
print(user.get("name"),user.get("age"))
print(user.get("asdad")) #如果键不存在,则会返回none
print(user.get("nima","默认值")) #如果键不存在,则会返回默认值
5.字典元素的增删改操作

mymap = {"userName":"张三","userAge":20,"height":175.5}
print(mymap)
print("userName" in mymap)
del mymap["userName"] #删除指定key
print(mymap)
mymap["userName"] = "李二狗"
print(mymap)
mymap.clear() #清除字典
print(mymap)
常用操作
mymap = {"userName":"张三","userAge":20,"height":175.5}
print(mymap.keys()) #获取字典中的所有key
print(mymap.values()) #获取字典中的所有value
print(mymap.items()) #获取字典中的所有key-value
lst = list(mymap.items())
print(lst)
遍历字典
for item in mymap: #遍历字典,item是字典的key值
print(item,"-",mymap.get(item))
字典的特点
- ·字典中的所有元素都是一个key-value对, key不允许重复,value可以重复
- Python 3.7 起字典保留插入顺序,不能将其当作按键自动排序的容器
- 字典的 key 必须可哈希;仅说“不可变”不够准确,例如包含列表的元组也不能作键
- 字典也可以根据需要动态地伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
6.字典推导式

userFiles = ["userName","age","height"]
userVals = ["张三",25,175.5]
d = {key.upper():val for key,val in zip(userFiles,userVals)} #字典推导
print(d)
参考
正文到此结束
- 本文标签: Python
- 本文链接: https://www.tianyajuanke.top/article/43
- 版权声明: 本文由吴沛芙原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权