列表数据类型
列表(数据类型不限制,元素可修改):
是一种有序的集合额,用于存储一组有序的数据,可以包含任意数量的元素,并且每个元素可以是不同的数据类型例如:里面可以是整数,小数等。与字符串不同的是,列表里的元素是可以修改的。
定义方式:
列表名称 = [元素1,元素2]
列表的访问:下标访问和切片访问。
下标访问:
与字符串的索引一样,列表索引从左到右从0开始,注意访问不能超出下标访问方式。
列表名[下标]
# 列表的下标访问
my_list=[1,2,3,4,5]
print(my_list[0])
print(my_list[1])
print(my_list[-1])
print(my_list[10])
切片访问:
列表名字[初始位置:终止位置:步长]
访问时,包括初始位置,不包括终止位置,且步长为1,如果没有给出终止位置,则包括终止位置。
# 切片访问
my_list = [1,2,3,4,5]
print(my_list[0:3:1])
print(my_list[::-1])
print(my_list[0:3:2])
print(my_list[:3])# 可以省略冒号和步长(默认为1的情况下)
print(my_list[-4:])
列表元素的增加
append():向列表的尾部添加元素
insert():向列表的指定位置添加元素
insert():将另一个列表多的所有元素添加到本列表
# 列表的添加元素
my_list=[1,2,3]
my_list2=[4,5,6]
# my_list.append(4) 在末尾添加元素
# insert的使用
#my_list.insert(0,4)
# extend的使用 将my_list2添加到my_list列表中
my_list.extend(my_list2)
print(my_list)
列表元素的删除
# 列表元素的删除
# remove 用于删除指定元素
my_list=[1,2,3,4,5]
# my_list.remove(5)
# pop将列表某个元素弹出,可以使用变量去接受,可以指定要删除元素的下标
# my_list.pop(1)
num = my_list[0]
print(num)
print(my_list)
# clear:删除列表的所有元素,使列表成为空列表
# my_list.clear()
# del:是一个关键字,当指定下标时,删除对应的元素,不指定下标时,删除整个列表
#del my_list #删除整个列表 相当于这个变量都不存在了 故会报错name 'my_list' is not defined没定义
print(my_list)
pop()
修改
列表名[索引] = 新的元素内容
# 列表元素的修改
# 下标的修改
# my_list=[1,2,3]
# my_list[0]=6
# print(my_list)
# 切片修改
# 当等号右边使用列表,可以跨数量修改
# my_list[0:2] = [3,4,5]
# print(my_list)
# 当等号右边不使用列表,不可以跨数量修改,赋值的数量必须要和要修改的数量一致
# 多个值赋值需要使用逗号隔开
# my_list[0:2] = 3,4
# print(my_list)
列表元素的查找
count()
in
not in关键字查找,如果不存在就返回True,否则返回False
列表元素的其他常用操作
len()
reverse
sort
# 列表的其他常用操作
# my_list2=[4,5,6,8,1,2,3]
# print(len(my_list2))
# # 列表的反转操作,不需要参数
# my_list2.reverse()
# print(my_list2)
# 列表的排序操作
# my_list=[6,46,32,1,10]
#my_list2=['qwe','qwert','yyyis']
# sort()函数参数默认为False,reverse=False
# False按照从小到大顺序排序;True为从大到小排序
# key参数:可以指定排序所参照的属性,比如传入len函数,会按照元素个数进行排序
# my_list.sort(reverse=False)
# my_list2.sort(reverse=True,key=len)
# print(my_list2)
列表的嵌套
也就是一个列表里的所有元素都是列表
# 列表的嵌套
# 如果想要访问到具体的元素的话,嵌套多少层列表,就需要指定多少层
# my_list=[[1,2,3],[4,5,6]]
# print(my_list[0][1])
浅拷贝
copy():该对象与原始对象的内容相同,但是内部的可变元素是可变元素的引用,而不是新的独立对象。简单理解:修改后则变量跟着变
深拷贝
创建新的对象,该对象及其内部的所有元素都是原始对象中元素的副本,而不是引用。修改后变量不会跟着变
# 列表的浅拷贝
l1 = [1,2,3,'abcd']
l2 =l1.copy()
print(l1)
print(l2)
# 修改l1列表里的元素
l1[0]=10
print(l1)
print(l2)
# 列表的深拷贝
l1 = [[1,2,3],4,5,6]
# 定义一个深拷贝列表
import copy
l3 = copy.deepcopy(l1)
print('修改前的l1列表',l1)
print('修改前的l2列表',l2)
print('修改前的l3列表',l3)
l1[0][1] = 10
print('修改后的l1列表',l1)
print('修改后的l2列表',l2)
print('修改前后的l3列表',l3)
列表推导式
是一种简洁的方式来创建或修改列表的方法,允许你使用单行的代码从一个已有的可迭代对象(如列表、元组、集合、字典等)中快速构建列表,语法格式如下:
new_list=[expression for item in iterable if condition]
expression:用于生成新列表的表达式
item:可迭代对象中的元素,例如列表中的元素
iterable:可迭代的对象,例如列表、元组、集合等
condition:是一个可选的条件,用于过滤元素
列表推导式也可以进行嵌套(了解)
# 列表推导式
# ls1 =[1,2,3,4,5]
# 执行逻辑: 首先从ls1拿出 i 将i与4比较,条件成立,就输出对应平方,不满足就不执行这个平方操作
# squared_list = [i**2 for i in ls1 if i<4]
# print(squared_list)
# 列表推导式的嵌套使用
# 原始列表
ls1 =[[1,2,3],[4,5,6],[7,8,9]]
# 目标:将这个嵌套的列表,拆为普通的列表
# [1,2,3,4,5,6,7,8,9]
# 使用for第一层循环,访问到内层的列表
new_ls1 =[]
for i in range(len(ls1)):
for j in range(len(ls1[i])):
print(ls1[i][j])
new_ls1.append(ls1[i][j])
print(new_ls1)
# 执行逻辑:首先需要从嵌套列表里得到小的列表,所以首先执行的是for x in ls1
# 此时X就分别代表了这三个小列表
# 接着执行for y in x,从x这个列表得到y的具体值
# 然后直接放到新的列表 此时新列表就完成了
new_ls1 =[y for x in ls1 for y in x]
print(new_ls1)
课后习题
编程题
编写一个 Python 脚本,给定一个包
含数字的列表 numbers = [15, 8,
23, 4, 42, 16] 。不使用内置的
max() 和 min() 函数找到其中的最
大值与最小值。
'''
参考答案:
numbers = [15, 8, 23, 4, 42, 16]
if not numbers: # 处理空列表情况
print("列表为空,无法找到最大最小值。")
else:
# 初始化最大值和最小值为列表的第一个元素
current_max = numbers[0]
current_min = numbers[0]
# 从列表的第二个元素开始遍历
for number in numbers[1:]:
if number > current_max:
current_max = number # 更新最大值
if number < current_min:
current_min = number # 更新最小值
print(f"列表为: {numbers}")
print(f"列表中的最大值是: {current_max}")
print(f"列表中的最小值是: {current_min}")
我的答案:
numbers = [15,8,23,4,42,16]
numbers.sort(reverse = True)
max =numbers[0]
print(f"列表最大值为:{max}")
numbers.sort(reverse = False)
min =numbers[0]
print(f"列表最小值为:{min}")
总结:
1.可以只排序一次,最小值就是numbers[-1]
2.没有考虑可能存在空列表的情况
浙公网安备 33010602011771号