Python学习笔记(八)列表与元组

一、列表的创建

示例:

1 # 列表中的元素可以是任意数据类型
2 li = [1, 2, 3, 4, '张三', '李四']
3 print(li)
4 li1 = []  # 空列表 用于存放数据
5 # list() 中必须是可迭代对象
6 li2 = list('123456789')  # 等价于['1','2','3','4','5','6','7','8','9']

二、列表常用操作

1.访问列表中的值

1)根据索引访问

1 name_list = ['张三', '李四', '王五', '赵六']
2 print(name_list[0])
3 print(name_list[1])
4 print(name_list[2])

2)根据切片访问

复制代码
 1 # listname[start:end:step]
 2 # 切片范围左闭右开
 3 # 起始值默认为0
 4 # 步长默认为1
 5 li = list(range(1, 11, 1))
 6 print(li)
 7 # 拿到所有偶数
 8 print(li[1::2])
 9 # 拿到大于5的数
10 print(li[5:])
复制代码

3)index()返回指定数据所在位置的下标

1 li = list(range(1, 11, 1))
2 # 元素为5的索引值,不存在时报错
3 print(li.index(5))

4)count()统计指定数据在列表中出现的次数

1 li = list(range(1, 11, 1))
2 print(li.count(1))

5)len()访问列表长度

1 # len函数的核心实现就是通过循环实现的
2 li_adc = [1, 23, 34, 45, 767, 143, 13, 12, 4, 5, 76, 8, 9, 0, 12, 3, 123, 123, 13, 124, 123, 12, 124, 12, 3, 124, 1, 3,
3           12, 4, 65, 7, 586, 79, 6, 9, 6, 67, ]
4 print(len(li_adc))
1 # 成员运算符:in not in
2 # 逻辑运算符:and or not
3 name_list = ['张三', '李四', '王五', '赵六']
4 name = input('请输入您要搜索的名字:')
5 if name in name_list:
6     print(f'您输入的名字是{name},名字已经存在')
7 else:
8     print(f'您输入的名字是{name},名字不存在')

2.列表添加元素

1)append()用于在列表的末尾追加元素

1 name_list = ['张三', '李四', '王五', '赵六']
2 print(name_list)
3 name_list.append('阿坤')
4 print(name_list)

2)extend()扩展列表

3)insert()在指定位置新增数据

1 name_list = ['张三', '李四', '王五', '赵六']
2 alist = ['', '', 'rap', '篮球']
3 name_list.append(alist)  # 添加
4 print(name_list)
5 name_list.extend(alist)  # 拓展
6 print(name_list)
7 name_list.insert(2, '123456')  # 指定位置新增数据
8 print(name_list)

 

 

 3.删除列表元素

1)del

1 name_list = ['张三', '李四', '王五', '赵六']
2 print(name_list)
3 del name_list  # 此列表已经被删除
4 print(name_list)  # NameError: name 'name_list' is not defined

name_list 删除,打印会报错

1 name_list = ['张三', '李四', '王五', '赵六']
2 del name_list[3]
3 del name_list[4]  # IndexError: list assignment index out of range
4 print(name_list)

name_list 索引4超范围,报错

2)clear()清空列表

1 name_list = ['张三', '李四', '王五', '赵六']
2 name_list.clear()
3 print(name_list)  # 空列表

3)pop()删除指定下标的元素,默认删除最后一个

1 name_list = ['张三', '李四', '王五', '赵六']
2 name_list.pop()
3 name_list.pop(2)
4 name_list.pop(4)  # IndexError: pop index out of range
5 print(name_list)

索引超范围,报错

4)remove()删除指定元素

1 name_list = ['张三', '李四', '王五', '赵六']
2 name_list.remove('罗翔')  # ValueError: list.remove(x): x not in list
3 print(name_list)

指定元素不存在列表中,报错

4.修改列表元素

1)根据索引修改

1 # 1 拿到六这个元素
2 # 2 对这个元素进行重新赋值
3 li = [1, 2, 3, 4, 5, '', 7, 8, 9]
4 print(li[5])
5 i = li.index('')  # 获取“六”的索引
6 li[i] = 6
7 print(li)

2)使用切片修改

1 # 不是一一对应
2 li = [1, 2, 3, 4, 5, '', 7, 8, 9]
3 li[0:3] = ['a', 'b']
4 li[0:3] = ['a', 'b', 'c']
5 li[0:3] = ['a', 'b', 'c', 'd']
6 print(li)

注:切片修改替换的是指定片段,被替换数量和新元素数量并不严格要求一致

3)reverse()逆置

1 num_list = [1, 5, 2, 3, 6, 8]
2 num_list.reverse()
3 print(num_list)

4)sort(reverse=False)排序

复制代码
 1 num_list = [1, 5, 2, 3, 6, 8]
 2 num_list.sort(reverse=False)  # 从小到大 升序 默认
 3 print(num_list)
 4 
 5 num_list.sort(reverse=True)  # 从大到小 降序
 6 print(num_list)
 7 
 8 # 必须同类型数据才能排序
 9 li = [1, 2, 3, 4, 5, '', 7, 8, 9]
10 li.sort(reverse=True)  # TypeError: '<' not supported between instances of 'str' and 'int'
11 print(li)
复制代码

5.列表的复制

1)copy()复制一个列表 浅复制

1 name_list = ['张三', '李四', '王五', '赵六']
2 name_list2 = name_list.copy()
3 print(name_list, id(name_list))
4 print(name_list2, id(name_list2))  # 内存改变

6.列表的循环遍历

复制代码
 1 name_list = ['张三', '李四', '王五', '赵六']
 2 # for
 3 for i in name_list:  # i指的是值
 4     print(i)
 5 
 6 # while
 7 i = 0
 8 while i < len(name_list):
 9     print(name_list[i])
10     i += 1
复制代码

7.列表的嵌套

复制代码
1 name_list = [
2     ['张三', '李四', '阿坤'],
3     ['', '', '篮球'],
4     ['', '', '']
5 ]
6 
7 # 找到甲
8 print(name_list[2][0])
9 print(name_list[-1][0])
复制代码

三、元组

1 # 不可修改
2 tup = (1, 2, 3, 4, 5)
3 # tup[1] = 'asd'  # TypeError: 'tuple' object does not support item assignment
4 print(tup, type(tup))
5 tup1 = tuple('123456')
6 print(tup1, type(tup1))

如果定义的元组只有一个数据,name这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型

1 tup2 = (10,)
2 print(tup2, type(tup2))

1.查找

元组数据不支持修改,只支持查找

1)index()

查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同

1 tuple1 = (1, 2, 3, 4, 5)
2 print(tuple1.index(3))

2)count()

统计某个数据在当前元组出现的次数

1 tuple1 = (1, 2, 3, 4, 5)
2 print(tuple1.count(3))

3)len()

统计元组中数据的个数

1 tuple1 = (1, 2, 3, 4, 5)
2 print(len(tuple1))

2.修改

元组内的直接数据如果修改则立即报错,但如果元组内有列表,修改列表里面的数据则是支持的

1 tup = (1, 2, 3, 4, 5)
2 print(tup[1])
3 print(tup[1:3])
4 # tup[1] = 'asd'  # TypeError: 'tuple' object does not support item assignment
5 
6 tup = (1, 2, [1, 2, 3, 4], 4, 5)
7 tup[2][1] = 'aaa'
8 print(tup)

3.删除

del 当创建的元组不再使用,可以通过del关键字将其删除

1 tup = (1, 2, 3, 4, 5)
2 del tup

4.列表与元组的区别

列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)

元组是静态数组,他们不可变,且其内部数据一旦创建则不可改变

元组缓存于python运行时环境,意味着每次使用元组时无须访问内核去分配内存

三、可变数据类型与不可变数据类型

可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称为可变数据类型

不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也发生改变,对于这种数据类型,就称为不可变数据类型

复制代码
 1 b = 'a'
 2 print(b, id(b))
 3 b = b.upper()
 4 print(b, id(b))
 5 # 列表
 6 li = [1, 2, 3, 4, 5]
 7 print(li, id(li))
 8 li.append(6)
 9 print(li, id(li))
10 
11 # 可变数据类型:列表list、字典dict、集合set
12 # 不可变数据类型:字符串str、数值int/float/...、元组tuple
13 # 当修改某个东西时 内存不会改变 说明这个东西是可变的 可变的数据类型
14 # 当修改某个东西时 内存会改变 说明这个东西是不可变不能够进行修改 不可变的数据类型
复制代码

 

posted @   梵星语  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示