day 6

本文详细介绍了Python中列表(list)的数据类型特性,包括列表的定义、可变性、元素操作(单个元素和切片)、遍历方法以及增删改的基本操作。通过实例演示了如何创建、操作和维护列表,适合初学者理解列表的基础使用。

day 6

列表

1. 容器型数据类型(序列)
  • 变量从是否是容器分为:非容器型数据类型的变量和容器型的数据变量
    非容器型数据类型的变量 :

    一个盒子里面只有一个格子,所以同一时间只能保存一个数据。

    例如:int、float、bool、None

  • 容器型数据类型的变量 :

    一个盒子里面有多个格子,每个格子可以存储不一样的数据,所以同一时间就可以保存多个数据
    例如:list、dict、tuple、set、str等

2.什么是列表(类型:list)
  • 列表是容器型数据类型:将[]作为容器标志,里面多个元素用逗号隔开
    [元素1,元素2,元素3,…]

  • 列表是可变的(可变指的是元素的个数、值、和顺序可变 - 支持增删改);
    列表有序(支持下标操作);
    列表中的元素:任何类型的数据都可以作为列表的元素。(没有要求)

  • 元素 - 指的是容器中每一个独立的数据

空列表

list = []
print(list)

list2 是一个列表,列表中只有一个元素

list2 = [10]
print(list2)

list3 = [10, 19, 34]
print(list3)

同一个列表中的元素可以是不同类型的数据

list4 = [10, 23.4, True, 'abc', [100,200]]
print(list4)

获取列表元素

1.获取单个元素
语法:

列表[下标] : 获取指定下标对应的元素

说明:
列表: 任何结果是列表的表达式,例如:保存列表的变量或具体的列表数据
[] : 固定写法
下标 :下标(又叫索引)是有序序列中元素的位置信息。

Python中有序序列中元素的下标有两种:
第一种:从前往后,从0开始一次增加
第二种:从后往前,从-1开始一次减少

注意:下标不能越界
list = [10, 20, 30, 40]
 [10,20,30,40][]
list []

print(list[0])
print(list[2])
print(list[-1])
#print(list[5])  # 报错:IndexError: list index out of range

练习:定义一个列表,用两种下标值,获取每个元素

list1 = [10, 20, 30, 40, 50]
print(list[0])
print(list[1])
print(list[2])
print(list[3])
print('=====================')
print(list[-1])
print(list[-2])
print(list[-3])
print(list[-4])
2.切片(获取部分元素)
语法1:

列表[开始下标:结束下标:步长]

1)确定是否可以获取数据:从开始下标到结束下标的方向如果和步长对应的方向(不长为正表示从前往后,不长为负表示从后往前)
一致就可以获取数据,否则结果就是空列表。
2)确定有效范围:开始下标对应的元素可以取到,结束下标对应的元素取不到
-> [N:M] ->从N开始取到M-1的数据
3)确定切片结果:在有效范围内按照步长的绝对值取数据;结对值为1就一个一个取
绝对值为2就跳一个取一个

  • 开始下标到结束下标的方向如果和步长对应的方向一致,就可获取到数据

    heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安其拉', '瑶', '孙斌']
    print(heroes[0:2:1])
    print(heroes[0: -1:1])
    print(heroes[-1:2:-1])
    
  • 开始下标到结束下标的方向如果和步长对应的方向不一致,一定取不到数据

    print(heroes[1:4:-1])
    print(heroes[5:1:2])
    print('=====================')
    print(heroes[1:5:1])
    print(heroes[-1:3:-1])
    
  • 练习:写出以下表达式的打印结果:

    heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安其拉', '瑶', '孙斌']
    print(heroes[0:5:2])  # ['李白','张飞','刘备']
    print(heroes[1:-2:-1])  # []
    print(heroes[2:-2:2])  # ['张飞','刘备']
    print(heroes[-2:0:-3])  # ['瑶','关羽']
    print(heroes[-1:-4:1])  # []
    print(heroes[0:6:3])  # ['李白','关羽']
    
  • 练习2:写切片获取指定内容

    heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安其拉', '瑶', '孙斌']
    ['张飞', '关羽', '刘备']
    ['李白', '李信', '张飞', '关羽']
    ['瑶', '安琪拉', '刘备']
    ['李信',  '关羽',  '安琪拉']
    ['孙膑', '安琪拉']
    ['李信', '瑶']
    print(heroes[2:5:1])
    print(heroes[0:4:1])
    print(heroes[-2:3:-1])
    print(heroes[1:-2:2])
    print(heroes[-1:4:-2])
    print(heroes[1: -1:5])
    

语法2:省略步长
列表[开始下标:结束下标] – 步长为1

print('==========一==============')
heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安其拉', '瑶', '孙斌']
print(heroes[1:3])
print(heroes[1:-1])
print(heroes[3:0])

语法3:省略开始下标
列表[:结束下标:步长]/列表[:结束下标]
如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取

print('==========二=============')
print(heroes[:5])
print(heroes[:-2:2])
print(heroes[:5:-1])

语法4:省略结束下标
列表[开始下标::步长]/列表[开始下标:]
如果步长为正,从开始下标从前往后取完为止;如果步长为负,从开始下标开始从后往前取取完

列表[::步长] – 全部取,方向由步长决定

print('=========三=============')
print(heroes[3:])
print(heroes[3::2])
print(heroes[4::-1])

练习:推算以下表达式的打印结果

heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑']
print(heroes[2:5])  # ['张飞', '关羽', '刘备']
print(heroes[3::-2])  # ['关羽', '李信']
print(heroes[-3::-1])  # ['安其拉','刘备','关羽','张飞','李信','李白']
print(heroes[:-4:2])  # ['李白', '张飞']
print(heroes[1::3])  # ['李信','刘备','孙斌']
print(heroes[:-2])  # ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉']
3.遍历 - 一个一个的全部取出来

方法一: 直接获取元素
for 变量 in 列表:
循环体

变量依次获取的就是列表中的每个元素

方法二: 通过获取每个元素的下标来获取元素
for 变量 in range(列表长度):
循环体

变量依次获取的是列表中元素的下标
补充:len(列表) - 获取列表长度

nums = [10, 20, 30, 40, 50, 60]
for i in nums:
    print('i:', i)
    
for x in range(len(nums)):
    print(x,nums[x])
    
for x in range(-1,-len(nums)-1,-1):
    print(x,nums[x])
    
for x in range(len(nums)-1,-1,-1):
    print(x)

练习:scores保存所有学生的分数
1)统计不及格学生人数
2)计算学生平均分

scores = [90, 78, 54, 67, 88, 30, 59]

sum = 0
count = 0
for x in range(len(scores)):
    if scores[x] < 60:
        count += 1
    sum += scores[x]
print('不及格人数:',count)
print('平均分:',sum / len(scores))

练习2:已知列表nums,统计nums中整数的个数

nums = [90, 1.23, 'abc', 12, 0.12]
count = 0
for i in nums:
    if type(i) == int:
        count += 1
print('整数个数:',count)


列表的增删改

1.增 - 添加元素
1) 追加

列表.append(元素) - 将元素添加到列表的最后

print('==========append实例===============')
list1 = [10, 20]
print(list1)

list1.append(100)
print(list1)

scores = [90, 78, 65, 45, 55, 89, 30, 99]
new_score = []
for i in scores:
    if i < 60:
        new_score.append(i)
print(new_score)
2) insert -插入

列表.insert(下标,元素) – 将元素插入到指定下标前

print('=========insert实例================')
nums = [10, 20, 30, 40]
print(nums)
nums.insert(1, 100)
print(nums)

练习:已知一个列表,列表中的元素已经从小到大排好序,插入输入的数据,要求插入后不影响顺序

nums = [12, 23, 56, 78, 99, 120]
80   -> [12, 23, 56, 78, 80, 99, 120]
2    ->  [2, 12, 23, 56, 78, 99, 120]
num=float(input('请输入一个成绩:'))
for  i in range(len(nums)):
    if nums[i] > num:
        nums.insert(i,num)
        break
else:
    nums.append(num)
print(nums)
2.删 - 删除元素
1)del 列表[下标] – 删除指定下标对应的元素
print('=========del 列表[下标]================')
TVS = ['海贼王', '火影忍者', '名侦探柯南', '七龙珠', '秦时明月', '灵笼']
print(TVS)
del TVS[2]
print(TVS)
2) 列表.remove(元素) – 删除指定元素

如果元素不存在会报错;如果有重复的,只删除最前面的那个

print('=========列表.remove(元素)================')
TVS = ['海贼王', '火影忍者', '名侦探柯南', '七龙珠', '秦时明月', '灵笼']
print(TVS)
TVS.remove('七龙珠')
print(TVS)

TVS = ['海贼王', '火影忍者', '名侦探柯南', '七龙珠', '秦时明月', '灵笼', '火影忍者']
TVS.remove('火影忍者')
print(TVS)
3)

列表.pop() - 取出最后一个元素
列表.pop(下标) - 取出指定下标对应的元素

print('==============pop====================')
TVS = ['海贼王', '火影忍者', '名侦探柯南', '七龙珠', '秦时明月', '灵笼', '火影忍者']
TVS.pop()
result = TVS.pop()
print(TVS, result)

TVS.pop(2)
result = TVS.pop()
print(TVS, result)
3.改

列表[下标]=值 – 将列表中指定下标对应的元素改成指定的值

print('=========改 - 修改人数================')
TVS = ['海贼王', '火影忍者', '名侦探柯南', '七龙珠', '秦时明月']
TVS[2] = '灵笼'
print(TVS)

练习:将score中所有不及格的分数改成0分

score = [90,34,89,55,88,33,78]
for i in range(len(score)):
    if score[i] < 60:
        score[i] = '0'
print(score)

in 操作

1. in

元素 in 列表 – 判断列表中是否存在指定的元素
存在是Ture ,不存在是Flase

2.not in

元素 not in 列表 --判断列表中是否不存在指定元素
不存在是Ture, 存在是Flase


print(10 in [10,20,30])
print([10,20] in [10,20,30])
print([10,20] in [[10,20],30])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值