列表数据类型

列表(数据类型不限制,元素可修改):

是一种有序的集合额,用于存储一组有序的数据,可以包含任意数量的元素,并且每个元素可以是不同的数据类型例如:里面可以是整数,小数等。与字符串不同的是,列表里的元素是可以修改的。

定义方式:

列表名称 = [元素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.没有考虑可能存在空列表的情况