列表和字典
一.列表
1.概念:问题:如果要一次性存储多个数据的,该怎么做?
#需求:存储5个人的年龄,求年龄的平均值
age1 = 10
age2 = 15
age3 = 30
age4 = 17
age5 = 24
avg = (age1 + age2 + age3 + age4 + age5) / 5
解决办法:采用列表
作用:相当于一个容器,可以同时存储多个数据
本质:列表是一种有序的集合
说明:有序指的是有顺序【存储的存放顺序和在内存中存储的顺序是相同的】
语法:变量名 = 列表
列表名称 = [数据1,数据2.。。。。]
说明:
a.通过[]定义列表
b.列表中存储的数据被称为元素
c.列表中的元素会从头到尾进行编号,编号从0开始,这个编号被称为索引,角标或者下标
d.索引的取值范围:0~列表中元素的个数 - 1 【0~列表的长度- 1】
e.超过索引的范围:列表的索引越界
代码演示:
#元素的访问
#1.取值
#语法:列表名[索引]
#索引:0~4
list1 = [543,5,46,56,6]
num1 = list1[2]
print(list1[2])
print(num1)
#列表索引越界
#print(list1[-10]) #IndexError: list index out of range
#print(list1[5])
#语法:列表名[索引] = 新值【列表中的元素本质上是一个变量,所以替换之的操作其实就是给变量重新赋值】
list1[2] = 100
print(list1[2])
#列表的操作
#1.列表组合:+
list1 = [54,5,45,4]
list2 = ["abc","fhj","ghfjg"]
#列表的组合并没有修改原来的列表,而是生成了一个新的列表
list3 = list1 + list2
print(list3)
print(list1)
print(list2)
#2.列表元素重复:*
#2.1列表中可以存储重复元素
l1 = [20,20,40,45,54,20]
print(l1)
#2.2
l2 = [10,20,30]
l3 = l2 * 3
print(l3)
#3.判断元素是否在列表中:成员运算符[int not in]
#注意:成员运算符运算的结果为布尔值
#一般结合if语句使用
l4 = [34,54,56,"anc"]
print(34 in l4)
print(34 not in l4)
print(100 in l4)
print(100 not in l4)
"""
True
False
False
True
#4.列表的截取【切片】
#4.1截取指定的区间:列表名[开始索引:结束索引]
#特点:涉及到区间,包头不包尾 前闭后开区间:[2,4)
l5 = [34,54,56,"anc",5,65,76,7677]
print(l5[2:4])
#4.2从开头截取到指定位置
print(l5[0:5])
print(l5[:5])
#4.3从指定位置截取到结尾
print(l5[3:7])
print(l5[3:])
#注意;如果要取到最后一个元素,可以超过索引的范围,在这种情况下不会报错
print(l5[3:20])
#1.添加元素
#1.1 append():在列表元素的末尾追加元素
list11 = [10,20,30]
print(list11)
#追加单个元素
list11.append(40)
print(list11)
#追加多个元素
#list11.append(50,60) #错误演示
#注意:使用append功能,追加多个元素,不能直接追加,通过列表的形式追加
list11.append([50,60])
print(list11)
#1.2 extend():扩展,在列表的末尾添加元素
list12 = [10,20,30]
print(list12)
#追加单个元素
#list12.extend(40) #错误演示:extend不能直接添加单个元素
# #iterable:可迭代的 iterator
#追加多个元素
#注意:使用extend添加多个元素,仍然采用列表的方式添加,但是,实际上添加的只是元素【打碎添加】
list12.extend([50,60])
print(list12)
print("~~~~~~~~")
#1.3 insert() ;插入,在指定索引处插入元素
#格式:insert(索引,插入的数据)
list13 = [10,20,30]
print(list13)
list13.insert(2,40)
print(list13)
#注意:插入一一个列表,将整个列表插入到原列表中
list13.insert(1,[50,60])
print(list13)
#2.删除元素
#2.1 pop(索引) ;弹出,移除列表中指定索引处的元素
list21 = [10,20,30,40,50,60]
print(list21)
#pop默认移除的是最后一个元素,得到的结果为被移除的元素
result1 = list21.pop()
print(list21)
print(result1)
#移除指定位置的元素
list21.pop(2)
print(list21)
#2.2 remove(元素) :移除,特点:移除的是列表中的元素【在列表中从0开始能够匹配到的第一个元素】
list22 = [10,20,30,40,50,60]
print(list22)
list22.remove(10) #等价于list22.pop(0)
print(list22)
#需求:移除列表中所有的数字10
list23 = [10,20,30,40,50,60,10,10,10,10,10,10]
""" list23.remove(10)
print(list23)
list23.remove(10)
print(list23)
list23.remove(10)
print(list23)
"""
num = 0
element = 10
cou = list23.count(element)
while num < cou:
list23.remove(element)
print(list23)
num += 1
print(list23)
#2.3 clear():清除,清除列表中的所有元素,原列表变为空列表
list24 = [10,20,30,40,50,60,10,10,10,10,10,10]
list24.clear()
print(list24)
#3.获取
#语法:功能名(列表名)
#3.1 len() length,获取列表的长度【获取列表中元素的个数】
list31 = [10,20,30,40,50,60,10,10,10,10,10,10]
length = len(list31)
#3.2 max();获取列表中元素的最大值 min() 最小值
print(max(list31))
print(min(list31))
#3.3 index() :索引,从列表中匹配到的第一个元素对应的索引值
inx1 = list31.index(10)
print(inx1)
#3.4 count();个数,查找指定元素在列表中出现的次数
c = list31.count(10)
print(c)
#4.其他
#4.1 reverse() 反转,将列表中的元素倒序输出
list41 = [10,20,30,40,50,60,10,10,10,10,10,10]
list41.reverse()
print(list41)
#4.2 sort() 排序,默认为升序排序,注意:在列表的内部操作
#升序
list41.sort()
print(list41)
#降序
list41.sort(reverse=True)
print(list41)
#sorted() 排序,默认为升序排序,注意:生成一个新的列表
list42 = [10,20,30,40,50,60,10,10,10,10,10,10]
#升序
newList1 = sorted(list42)
print(list42)
print(newList1)
#降序
newList2 = sorted(list42,reverse=True)
print(newList2)
#按照长度排序
list43 = ["fhjdhf","g","gfg"]
newList3 = sorted(list43,key=len)
print(newList3)
#4.3 拷贝【面试题】
#浅拷贝
#深拷贝
#a.从内存的角度
#浅拷贝:引用【栈空间】
list44 = [23,45,98]
list45 = list44
list45[1] = 100
print(list44)
print(list45)
print(id(list44) == id(list45))
#深拷贝:内存【实体,堆空间】
list51 = [23,45,98]
list52= list51.copy()
list52[1] = 100
print(list51)
print(list52)
print(id(list51) == id(list52))
二.字典
1.概念:解决方案:字典,将学生作为key,将成绩作为value,进行存储,方便查找【一一对应】
本质:也是一种存储数据的容器
特点:数据以键值对的形式存储的,具有快速查找的优势
注意:字典是无序的
key的特点
: a.字典中的key必须是唯一的
b.字典中的key必须是不可变的
list是可变的,不能充当key
tuple是不可变的,可以充当key,数字型和字符串都可以充当key
代码演示:
#1.创建字典
#创建一个空字典
dict1 = {}
#创建有键值对的字典
dict2 = {"zhangsan":60,"jack":90}
print(dict2)
2 获取value:语法 字典名.value
3 修改或者添加:语法:字典名[key]=value, 如果存在key则修改,否则添加新的键值对
4 删除:语法:字典名.pop(key)删除指定的 popitem()时删除字典中最后一个