4章 列表与元组
2020-09-08 本文已影响0人
码上版码
本章大纲
列表
元组
使用场景区别
列表
列表和元祖都是序列类型,也就意味着元组和列表有下标
字符串是一种Sequence(序列)类型----有下标
由一个个元素组成
每个元素是一个字符
元素 | H | i | , | J | a | y |
---|---|---|---|---|---|---|
正下标 | 0 | 1 | 2 | 3 | 4 | 5 |
负下标 | -6 | -5 | -4 | -3 | -2 | -1 |
列表也是一种Sequence(序列)类型
可以存储任何类型的数据,每个元素是任意类型
元素 | 1 | 1.333 | a | abc |
---|---|---|---|---|
正下标 | 0 | 1 | 2 | 3 |
负下标 | -4 | -3 | -2 | -1 |
print('---lesson4_列表+元组---')
# 1- 列表--下标 + 切片
# 可以存储任何类型的数据
alist = [10, 'hello', 3.14, [100, 200]] # 这就是列表
print(type(alist))
# 取值:一个值用下标;多个值用切片
# 列表中的逗号一般是元素与参数的分割,分号一般是句与句的分割--sql,java,c++,c语言都是分号分割语句
# 如果最外层列表中有3个分号,那么就有4个元素,也就是下标长度是4
print(len(alist))
print(alist[0]) # 取列表中的第一个元素
print(alist[3][0]) # 取列表中的最后一个元素中的元素100
print(10 in alist) # 查看10是否在alist列表中,True在
print(100 in alist) # 查看100是否在alist列表中,False不在
# 2- 修改值
uplist = [10, 'hello', 3.14, [100, 200]]
alist[0] = 20 # 将列表中下标为0的元素修改为20
print(uplist)
alist[-1][0] = 150 # 将子列表中的元素100修改为150
print(uplist)
alist[-1][1] = 'world' # 将子列表中的元素100修改为150
print(uplist)
# 3- 增加元素
list = [10, 20, 30, 40]
list.append(50) # 列表中的最后一个元素后面增加元素
# insert(第一个元素:需要插入位置下标, 第二个元素需要插入的值)
# insert 插入的位置下标大于 >len,相当于append--尾部增加;小于 >len,在第一个元素后面插入
list.insert(20, 25) # 大于 >len,相当于append--尾部增加
list.insert(2, 23) # 小于 >len,在第一个元素后面插入
# 插入列表
list.insert(10, [20, 'hello', 'my name is tom'])
list.insert(1, [20, 'world', '小明'])
print(list)
# 4- 删除
# 4-1 del
dellist = [10, 20, 22, 3, 44,33]
del dellist[1] # 删除下标为1的值(元素)
# 删除多个元素,第一次删除后重新排序,在执行第二个删除
del dellist[1], dellist[2]
del dellist[1:1+2] # 切片取值,第一刀元素下标+获取的元素个数=第二刀获取的元素
del dellist[::2] # 步长获取元素,步长=2,隔一个个取一个
print(dellist)
# 4-2 pop 有返回值--会返回被删除的对象
poplist = [10, 20, 22, 3, 44,33]
poplist.pop(2) # 将下标为2的对象删除
res = poplist.pop(3) # 将被删除对象赋值给一个变量res
print(res)
print(poplist)
# 4-3 remove -- 根据值来删除 -- 首先判断值是否存在 -- 效率最慢
relist = [1, 2, 'hello', [199, 200], 200, 31]
relist.remove(2) # 删除的值一定要存在,否则报错
print(relist)
# 如果列表中有多个相同的对象,只能删除第一个对象
relist1 = [0, 1, 1, 2, 'hello', [199, 200], 200, 31]
relist1.remove(1)
print(relist1)
"""
元素存在:
一直删
"""
relist2 = [0, 1, 1, 2, 'hello', [199, 200], 200, 31, 1]
# 第一种写法
while 1 in relist2:
relist2.remove(1)
print(relist2)
# 第二种写法:
# 删除3次后退出循环
cnt = 0 # 默认0
while 1 in relist2:
cnt += 1 # 每循环一次,cnt在原来基础上加1
relist2.remove(1)
if cnt >= 3: # 当cnt次数大于等于3退出循环
break
print(relist2)
# 5- 合并列表
list1 = [1, 2, 3, 12, 13]
# 5-1 临时合并--另存新地址--新对象,不改变原列表
print(list1+[40, 50], '----id:', id(list1)) # id()--地址
# 5-2 同一个地址--扩展列表
list1.extend([33, 44]) # 改变原列表
print(list1 ,'----id:', id(list1))
"""
总结:
1- 列表是--可变对象
2- 任意类型--存储
"""
元组
列表和元祖都是序列类型,也就意味着元组和列表有下标
元组也是一种Sequence(序列)类型
可以存储任何类型的数据,每个元素是任意类型
元素 | 1 | 1.333 | a | abc |
---|---|---|---|---|
正下标 | 0 | 1 | 2 | 3 |
负下标 | -4 | -3 | -2 | -1 |
元组和 list 非常相似 ,只有一个最大的不同:
元组不能改变其组成元素(immutable)
# 元组--只读,不可改变:元素个数,元素的值
# 元组是一个元素,元素后面必须有逗号,比如:(xxx,)
tu1 = () # 这就是元组
print(type(tu1))
使用场景区别
'''
使用场景:
1- 列表:存储数据--可以修改的、排序
2- 元组:一些项目的系统配置数据--不能修改
systemConfigData = ('xxx= false',)
'''
"""
案例场景:
需求:
1- 保存全班学生信息
2- 可以修改每一个学生信息
3- 可以增加/删除-学生信息
stuInfo = (
(学生1学号, 姓名, 地址, 电话),
(学生2学号, 姓名, 地址, 电话),
(学生3学号, 姓名, 地址, 电话)
)
stuInfo中的信息是元组,所以不能修改,将其改成列表就可修改:
stuInfo = [
[学生1学号, 姓名, 地址, 电话[,
[学生2学号, 姓名, 地址, 电话],
[学生3学号, 姓名, 地址, 电话]]
"""
info = ([100, 200],)
print('---id:', id(info))
info[0][0] = 30 # 元组中的子列表对象是可以修改的,因为对象本身是列表中的对象,而非元组中的对象
print('----id:', id(info))
扩展知识 | python中文翻译网站:https://learnku.com/python/docs |
---|---|
列表-转-元组:tuple(list) 元组-转-列表:list(tu1) | 转换出来的是一个新的对象 对转换前的对象不会产生影响 |