04.Python基础3
1.列表list
在Python中可以使用列表,对日常生活中的大量数据进行管理。
若没有列表类型,一个变量只能操作一个数据;手动为每个数据创建变量,无法动态添加数据。
(1)定义:由一系列变量组成的可变序列容器
(2)语法:
列表名 = [元素1,元素2,元素3]
(3)案例:
list_movie = ["八角笼中","封神第1部","消失的她"]
print(list_movie)
# result
['八角笼中', '封神第1部', '消失的她']
1.1序列
(1)定义:有顺序且空间连续的容器类型
(2)基础操作
+:用于连接两个容器
*:重复生成容器元素
list_movie01 = ["八角笼中"]
list_movie02 = ["封神第1部","消失的她"]
list_movie03 = list_movie01 + list_movie02
# ["八角笼中","封神第1部","消失的她"]
list_movie04 = list_movie01 * 2
# ["八角笼中","八角笼中"]
(3)成员运算
作用:判断容器中是否存在某一元素
语法:in not in
list_movie01 = ["八角笼中"]
list_movie02 = ["封神第1部","消失的她"]
print("消失的她" in list_movie01) # False
print("消失的她" in list_movie02) # True
print("消失的她" not in list_movie02) # False
(4)常用函数
len函数:计算容器中元素的数量
max函数:计算容器中最大的元素
min函数:计算容器中最小的元素
sum函数:对容器中元素求和计算
list_num=[1,11,23,48]
print(len(list_num)) # 4
print(sum(list_num)) # 83
print(min(list_num)) # 1
print(max(list_num)) # 48
1.2基础操作
1.2.1添加元素
列表名.append(元素)
列表.insert(索引,元素)
list_city=["beijing","shanghai","guangzhou"]
print(list_city)
# 在末尾新增元素
list_city.append("shenzhen")
print(list_city)
# 指定位置添加元素
list_city.insert(1,"重庆") #添加元素时按照列表索引添加从0开始,1就是添加到索引为1的位置
print(list_city)
# result
['beijing', 'shanghai', 'guangzhou']
['beijing', 'shanghai', 'guangzhou', 'shenzhen']
['beijing', '重庆', 'shanghai', 'guangzhou', 'shenzhen']
1.2.2定位元素
列表名[索引] = 元素
变量 = 列表名[索引]
变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表
列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表
list_movie = ["八角笼中","封神第1部","消失的她","哪吒","唐探"]
list_movie[0] = "满江红"
print(list_movie[0]) # 满江红
print(list_movie[:2]) # ['满江红', '封神第1部']
print(list_movie[1:]) # ['封神第1部', '消失的她', '哪吒', '唐探']
print(list_movie[1:4:2]) # ['封神第1部', '哪吒']
1.2.3删除元素
列表名.remove(元素)
del 列表名[索引或切片]
list_movie = ["八角笼中","封神第1部","消失的她","哪吒","唐探"]
list_movie.remove("唐探")
print(list_movie) # ['八角笼中', '封神第1部', '消失的她', '哪吒']
del list_movie[1]
print(list_movie) # ['八角笼中', '消失的她', '哪吒']
1.2.4遍历
(1)从头到尾读取
for 变量名 in 列表名:
变量名是元素
list_movie = ["八角笼中","封神第1部","消失的她","哪吒","唐探"]
for l in list_movie:
print(l)
(2)从头到尾修改:
for 索引名 in range(len(列表名)):
列表名[索引名]是元素
num_lsit=[10001,238999,15489,50001]
for i in range(len(num_lsit)):
if num_lsit[i] > 50000:
num_lsit[i]= 8888
print(num_lsit) # [10001, 8888, 15489, 8888]
练习
"""打印新增列表小于10的元素
现有列表所有元素累加2"""
list_num=[2,4,6,8,10,12,14]
for i in range(len(list_num)):
if list_num[i] < 10:
print(list_num[i])
for i in range(len(list_num)):
list_num[i]+=2
print(list_num)
1.2.5列表拷贝
为什么需要拷贝
(1)避免数据意外修改
有时候需要将可变数据传递给函数,并且希望函数对这个可变数据的操作不影响原始数据。
(2)保存数据原始快照
在某些情况下,需要创建一个相同状态的数据副本,以便之后可以对比或回滚到先前的状态。
深拷贝
深拷贝复制所有层的数据,拷贝后的数据完全独立。
import copy
list_movie = ["八角笼中",["消失的她","碟中谍7"]]
list_new = copy.deepcopy(list_movie)
list_new[0] = "满江红"
list_new[1][1] = "流浪地球"
print(list_movie) # ["八角笼中",["消失的她","碟中谍7"]]
print(list_new) # ['满江红', ['消失的她', '流浪地球']]
浅拷贝
浅拷贝复制第一层的数据,共享深层的数据。
import copy
list_lag=["java","python","php",["c","c++"]]
list_lag_new2=list_lag[:]
print(list_lag) # ['java', 'python', 'php', ['c', 'c++']]
print(list_lag_new2) # ['java', 'python', 'php', ['c', 'c++']]
list_lag_new2[1]="js"
list_lag_new2[3][0]="python3"
print(list_lag) # ['java', 'python', 'php', ['python3', 'c++']]
print(list_lag_new2) # ['java', 'js', 'php', ['python3', 'c++']]
"""根据以上输出的结果可知:
浅拷贝:创建一个新的列表对象,并把原始列表中的引用复制到新列表中
拷贝后的数据第1层分为两份,从第二层开始即深层数据原列表和新列表共享1份
也就是说原列表深层的数据会随新列表的修改而修改,第一层数据不会修改
再看下面的一个例子会更加清晰
"""
list_lag=["java","python","php",["c",["linux","win","mac"]]]
list_lag_new2=list_lag[:]
print(list_lag)
print(list_lag_new2)
list_lag_new2[0]="js"
list_lag_new2[3][1][2]="unix"
print(list_lag)
print(list_lag_new2)
深浅拷贝对比
深、浅拷贝是复制数据的两种方式。
深拷贝复制所有层的数据,拷贝后的数据完全独立。 优点是修改数据时互不影响,缺点是占用内存较大。
浅拷贝复制第一层的数据,共享深层的数据。 优点是占用内存较少,缺点是修改深层数据互相影响。 当需要拷贝的数据具有深层数据,建议使用深拷贝,否则使用浅拷贝。
1.2.5列表推导式
(1)需求:将大于60的元素存入新列表
(2)定义:通过简单的语法将可迭代对象转换为新列表
(3)作用:简化代码,避免了传统循环结构的繁琐,提高代码的可读性
(4)语法:
新列表 = [表达式 for 变量in 可迭代对象]
新列表 = [表达式 for 变量in 可迭代对象 if 条件]
# 传统代码
list_number = [66,25,72,86,57]
list_new = []
for item in list_number:
if item > 60:
list_new.append(item)
print(list_new) # [66,72,86]
# 列表推导式
# 新列表=[表达式 for 变量 in 可迭代对象]
# 新列表=「表达式 for变量 in 可迭代对象 if 条件]
# 表达式:针对于 可迭代对象的操作(计算)
# 变量: 每一个元素并
# 可迭代对象:列表 元组等
# 如果有if 过滤元素并
list_new = [item for item in list_number if item > 60]
print(list_new) # [66,72,86]
(5)适用性 使用条件:根据可迭代对象、构建新列表、过程够简单
练习
# 生成10--30之间能被3或者5整除的数字
list_new=[item for item in range(10,30,1) if item % 3 ==0 or item % 5 == 0]
print(list_new)
# 生成5 -- 20之间的数字平方
list_new=[ item ** 2 for item in range(5,20,1) ]
print(list_new)