【千锋Python2205班9.26笔记-day06-列表(一阶段)】

在这里插入图片描述

01-review

# 1.列表的作用  - 同时保存多个数据
# 2.什么是列表(list)
"""
容器(序列); [数据1, 数据2, 数据3,....]
可变的(增删改)、有序的(支持索引操作; 元素的顺序影响结构)
列表的元素:没有要求
"""
# 3.查
# 1)查单个:列表[下标]
# 2) 切片
"""
列表[开始下标:结束下标:步长]

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

列表[:结束下标:步长]
列表[开始下标::步长]
"""
nums = [18, 89, 34, 23, 50, 10, 29]
print(nums[2: -1: 2])
# [89, 50]
print(nums[1: -2: 3])

02-遍历列表

# 1. 遍历列表  -  将列表中的元素一个一个的取出来
"""
1)直接获取列表元素
for 变量 in 列表:
    循环体(循环体中变量获取到的是列表的元素)
    
2)通过遍历列表中每个元素的下标,来遍历列表中的元素
for 变量 in range(列表的长度):
    循环体(循环体中变量获取到的是列表中每个元素的下标,从0开始的下标)
    
    
for 变量 in range(-1, -列表长度-1, -1):
    循环体(循环体中变量获取到的是列表中每个元素的下标,从0开始的下标)
    
    
3)同时获取列表中每个元素的下标和每个元素
for 变量1,变量2 in enumerate(列表):
    循环体(循环体中变量1依次获取列表中每个元素的下标,变量2依次获取列表中的每个元素)

"""
tvs = ['甄嬛传', '琅琊榜', '仙剑奇侠传', '金粉世家', '亮剑', '爱情公寓', '庆余年']

# 遍历方式1:
for x in tvs:
    print(x)

print('------------------------------------------华丽的分割线------------------------------------------------')
# 遍历方式2:
# print(len(tvs))
for x in range(len(tvs)):
    print(x, tvs[x])

print('------------------------------------------华丽的分割线------------------------------------------------')
for x in range(-1, -len(tvs)-1, -1):
    print(x, tvs[x])

print('------------------------------------------华丽的分割线------------------------------------------------')
# 遍历方式3:
for index, item in enumerate(tvs):
    print(index, item)


# 练习1:1)求平均分 2)统计不及格学生的人数
scores = [89, 78, 61, 92, 20, 63, 51]
sum1 = count = 0
for x in scores:
    sum1 += x
    if x < 60:
        count += 1
print('平均分:', sum1/len(scores), '不及格人数:', count)

03-列表增删改查

# 1.增  - 往列表中添加元素
# 1)列表.append(元素)       -     在指定列表的最后添加指定的元素
names = ['肖生克的救赎', '霸王别姬', '阿甘正传']
print(names)
print('------------------------------------------华丽的分割线------------------------------------------------')
names.append('恐怖游轮')
print(names)

names.append('沉默的羔羊')
print(names)

# 2)列表.insert(下标, 元素)       -   将指定元素插入到列表中指定下标对应的元素前
names.insert(1, '加勒比海盗')
print(names)

# 案例:提取nums中所有的偶数
nums = [89, 78, 60, 77, 43, 22, 40]
# [78, 70, 22, 40]
result = []
for x in nums:
    if x % 2 == 0:
        result.append(x)
print(result)


# 练习:删除scores中不及格的分数
scores = [89, 78, 61, 92, 20, 63, 51]
# [89, 78, 61, 92, 63]
new_scores = []
for x in scores:
    if x >= 60:
        new_scores.append(x)
print(new_scores)

# 练习:将scores中所有不及格的分数修改成'重修'
scores = [89, 78, 61, 92, 20, 63, 51]
# [89, 78, 61, 92, '重修', 63, '重修']
new_scores = []
for x in scores:
    if x < 60:
        new_scores.append('重修')
    else:
        new_scores.append(x)
print(new_scores)

# 2.删  - 删除元素
# 1)del 列表[下标]          -       删除列表中指定下标对应的元素
names = ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
print(names)        # ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
print('------------------------------------------华丽的分割线------------------------------------------------')
del names[1]
print(names)        # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']

del names[-1]
print(names)        # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮']


# 2) 列表.remove(元素)      -       删除列表中指定元素
# 注意:如果元素不存在会报错; 如果元素有多个,只删最前面那一个
print('------------------------------------------华丽的分割线------------------------------------------------')
names = ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']
names.remove('加勒比海盗')
print(names)        # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']

# names.remove('长江7号')        # ValueError: list.remove(x): x not in list

names.remove('霸王别姬')
print(names)        # ['肖生克的救赎', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']

# 3)
# 列表.pop(下标)      -   取出列表中指定下标对应的元素并且返回
# 列表.pop()         -   取出列表中最后一个元素并且返回
names = ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']
result = names.pop(-2)
print(names, result)        # ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '霸王别姬'], 沉默的羔羊

result = names.pop()
print(names, result)        # ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬'], 霸王别姬

print('------------------------------------------华丽的分割线------------------------------------------------')
# 练习:删除scores中所有不及格的分数
# 1)有问题的代码 - 遍历列表的时候因为删除问题导致没有将列表中所有的元素取到
scores = [67, 40, 50, 78, 30, 60, 55, 39]
for x in scores:
    if x < 60:
        scores.remove(x)
print(scores)       # [67, 50, 78, 60, 39]

"""
scores = [67, 50, 78, 60, 39]
第1次:x = 67: if 67 < 60 -> if False
第2次:x = 40: if 40 < 60 -> if True -> scores.remove(40)
第3次:x = 78: if 78 < 60  -> if False
第4次:x = 30: if 30 < 60 -> if True -> scores.remove(30)
第5次:x = 55: if 55 < 60 -> if True -> scores.remove(55)
第6次:循环结束!
"""

# 解决方案2 - 删除之前对原数据进行备份,遍历备份数据,删除原数据
print('------------------------------------------华丽的分割线------------------------------------------------')
scores = [67, 50, 78, 30, 60, 55, 39]
# new_scores = [67, 50, 78, 30, 60, 55, 39]
# new_scores = scores[:]
for x in scores[:]:
    if x < 60:
        scores.remove(x)
print(scores)

# 解决方案2 - 倒着删
# 0 ~ 长度-1
# 长度-1, ..., 0
scores = [67, 50, 78, 30, 60, 55, 39]
for x in range(len(scores)-1, -1, -1):
    if scores[x] < 60:
        del  scores[x]
print(scores)

"""
scores = [67, 78,60]
x: 6 ~ 0
x = 6: 39
x = 5: 55
x = 4: 60
x = 3: 30
x = 2: 78
x = 1: 50
x = 0: 67
"""
# 解决方法3 - 需要删除的时候下标不增加
scores = [67, 50, 78, 30, 60, 55, 39]
index = 0
while True:
    if scores[index] < 60:
        del scores[index]
    else:
        index += 1
    if index == len(scores):
        break
print(scores)


# 3. 改  - 修改元素的值
# 列表[下标] = 值        -   修改指定下标对应的元素
scores = [67, 50, 78, 30, 60, 55, 39]
scores[0] = 100
print(scores)       # [100, 50, 78, 30, 60, 55, 39]

04-列表相关操作

# 1、列表数学运算: +、*
# 1) 列表1 + 列表2    -    将列表1中的元素和列表2中的元素进行合并,产生一个新的列表
list1 = [10, 20, 30]
list2 = [100, 200, 'abc']
list3 = list1 + list2
print(list3)        # [10, 20, 30, 100, 200, 'abc']

# 2) 列表 * N      -  重复N次列表中的元素产生一个新的列表
print(list1 * 2)

# 2. 列表比较运算:>、<、>=、<=、==、!=
# 1)判断是否相等
# 两个列表一模一样的时候才相等
print(list1 == [10, 20, 30])        # True
print(list1 == [20, 10, 30])        # False

# 2)比较大小        -       比较第一对不相等的元素的大小
# 列表1 > 列表2
print([10, 20, 300, 400] > [10, 22, 30])        # False
# print([10, 20, 300, 400] > [10, 'abc', 30])       # TypeError: '>' not supported between instances of 'int' and 'str'

print([10, 20, 30] > [5, 'abc'])

# 3. in 和 not in
# 数据 in 列表      -       判断列表中是否存在指定的数据
# 数据 not in 列表      -   判断列表中是否不存在指定的数据
list1 = [10, 20, 30]
print(10 in list1)      # True
print(1 in list1)       # False

print([10, 20] in list1)        # False
print(10 in [[10, 20], 30])     # False

print(10 in [[10, 20], 30][0])      # True
# [[10, 20], 30][0]   -> 列表[0]  -> [10, 20]

list2 = [[10, 20], 30]
print(list2[0])   # [10, 20]
# print(10 in [[10, 20], 30][0])

# 练习:去掉nums中重复的元素
nums = [10, 23, 40, 10, 55, 23, 40, 10]
# [10, 23, 40, 55]
new_nums = []
for x in nums:
    if x not in new_nums:
        new_nums.append(x)
print(new_nums)

05-列表相关函数

# 1.max、min
# max(列表)   -   获取列表中的最大值
# min(列表)   -   获取列表中的最小值
scores = [19, 89, 93, 80, 76, 62, 56]
print(max(scores))
print(min(scores))

# 案例:在不使用max的情况下,求scores中最高分
max1 = scores[0]
for x in scores[1:]:
    if x > max1:
        max1 = x
print(max1)

# 练习:求nums中个位数最小的元素
nums = [90, 83, 62, 77, 59, 81]
m = nums[0]
for x in scores[1:]:
    if x % 10 < m % 10:
        m = x
print(m)

# 2.sorted
# sorted(列表)    -   将列表中的元素从小到大排序,创建一个新列表
# sorted(列表, reverse=True)      - 将列表中的元素从大到小排序,创建一个新列表
nums = [90, 83, 62, 77, 59, 81]
new_nums = sorted(nums)
print(new_nums)     # [59, 62, 77, 81, 83, 90]

new_nums = sorted(nums, reverse=True)
print(new_nums)     # [90, 83, 81, 77, 62, 59]

# 按个位数的大小从小到大排序
new_nums = sorted(nums, key=lambda x: x % 10)
print(new_nums)     # [90, 81, 62, 83, 77, 59]

# 3.sum
# sum(列表)   -   求列表中所有元素的和
scores = [19, 89, 93, 80, 76, 62, 56]
print(sum(scores))

# 4.len
# len(列表)  - 获取列表中元素的个数
print(len(scores))

# 5.list
# list(数据)  -   将指定数据转换成列表(数据必须是序列 - 所有的序列都可以转换成列表, 转换的时候直接将序列中的元素转换成列表中的元素)
result = list('abc')
print(result)       # ['a', 'b', 'c']

result = list(range(5))
print(result)       # [0, 1, 2, 3, 4]

06-列表相关方法

# 列表.xxx()
# 1.列表.clear()  -   清空列表
nums = [90, 83, 62, 77, 59, 81]
nums.clear()
print(nums)     # []

# 2.列表.copy()   -   复制列表产生一个一模一样的新列表,将新列表返回
nums = [90, 83, 62, 77, 59, 81]
result = nums.copy()
print(result)

# 3.列表.count(元素)    -   统计列表中指定元素的个数
nums = [4, 56, 10, 90, 80, 90, 10, 10]
print(nums.count(10))
print(nums.count(90))
print(nums.count(100))

# 4.列表.extend(序列)  -  将序列中所有的元素都添加到列表的最后
nums = [90, 83, 62, 77, 59, 81]
list1 = ['abc', 100, '你好']

nums.extend(list1)
print(nums)     # [90, 83, 62, 77, 59, 81, 'abc', 100, '你好']

nums.extend('abc')
print(nums)     # [90, 83, 62, 77, 59, 81, 'abc', 100, '你好', 'a', 'b', 'c']

# 5.列表.index(元素)       -        获取指定元素在列表中的下标值(从0开始下标的下标值)
nums = [90, 83, 62, 77, 59, 81]
print(nums.index(83))       # 1
print(nums.index(81))       # 5

# 如果元素不存在会报错
# print(nums.index(100))      # ValueError: 100 is not in list

# 如果元素有多个,返回最前面一个的下标
nums = [90, 83, 62, 77, 83, 59, 81]
print(nums.index(83))       # 1

# 6.列表.reverse()        -       将列表倒序
nums = [90, 83, 62, 77, 59, 81]
nums.reverse()
print(nums)     # [81, 59, 77, 62, 83, 90]

# 7.
# 列表.sort()         -       将列表中元素从小到大排序
# 列表.sort(reverse=True)     -       将列表中元素从大到小排序
nums = [90, 83, 62, 77, 83, 59, 81]
result = nums.sort()
print('方法1:', nums, result)


nums = [90, 83, 62, 77, 83, 59, 81]
result = sorted(nums)
print('方法2:', nums, result)

07-列表推导

# 列表推导式  -  创建列表的表达式
# 1. 结构1
"""
语法:
[表达式 for 变量 in 序列]

创建列表的原理:让变量去序列中取值,一个一个的取,取完为止,每取一个值就计算一次表达式的结果并且将计算的结果作为列表的一个元素
"""

result = [10 for x in range(5)]
print(result)       # [10, 10, 10, 10, 10]

result = [x for x in range(5)]
print(result)       # [0, 1, 2, 3, 4]

result = [10*x for x in range(5)]
print(result)       # [0, 10, 20, 30, 40]

# 练习:用列表推导式将nums中所有的元素都乘以2
nums = [19, 45, 6, 7]
# [38, 90, 12, 14]
result = [x*2 for x in nums]
print(result)       # [38, 90, 12, 14]

# 练习:获取nums中所有元素的十位数
nums = [189, 78, 102, 99]
# [8, 7, 0, 9]
result = [x // 10 % 10 for x in nums]
print(result)

# 练习:将scores中所有的元素变成'及格'或者'不及格'
scores = [89, 70, 56, 42, 99, 81, 44]
# ['及格', '及格', '不及格', '不及格', '及格', '及格', '不及格']
result = ['不及格' if x < 60 else '及格' for x in scores]
print(result)


# 2. 结构2
"""
[表达式 for 变量 in 序列 if 条件语句]

创建列表的原理:让变量去序列中取值,一个一个的取,取完为止,每取一个值就判断一次条件是否成立,如果成立就计算表达式的结果作为列表的元素
"""

result = [x*2 for x in range(10) if x % 2 == 0]
print(result)   # [0, 4, 8, 12, 16]

# 练习:删除nums中多有大于70的奇数
nums = [90, 83, 62, 77, 59, 81]
# [90, 62, 59]
result = [x for x in nums if not(x > 70 and x % 2 != 0)]
print(result)


# 练习2:获取num中的所有偶数,并且将偶数除以2
nums = [90, 83, 62, 77, 59, 81]
# [45, 31]
result = [x//2 for x in nums if x % 2 == 0]
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值