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) 转换出来的是一个新的对象 对转换前的对象不会产生影响
上一篇下一篇

猜你喜欢

热点阅读