Day9笔记-列表系统功能&列表推导式&二维列表

帮助0基础的小伙伴入门和学习Python!一、列表进阶

1.列表系统功能【重点掌握】
函数说明
len(list)获取列表元素个数
max(list)返回列表元素最大值
min(list)返回列表元素最小值
list(seq)将元组转换为列表
list.append(obj)在列表末尾添加新的对象
list.count(obj)统计某个元素在列表中出现的次数
list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(seq)从列表中找出某个值第一个匹配项的索引位置
list.insert(index,obj)将对象插入列表
list.pop(index)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)移除列表中某个值的第一个匹配项
list.reverse()反向列表中元素
list.sort(key=None,reverse=False)对原列表进行排序
list.copy()复制列表
list.clear()清空列表
1.1增
# 1.list.append(obj)在列表末尾添加新的对象,特点:obj表示任意类型   *******
# 2.list.extend(iterable)在列表末尾一次性追加另一个序列中的多个值(用新列表中的元素扩展原来的列表)
# 3.list.insert(index,obj)将数据插入到列表的指定索引处,原元素向后顺延,
# 1.list.append(obj)在列表末尾添加新的元素,特点:obj表示任意类型   *******
list1 = [12,4,5]
print(list1)
list1.append(55)
list1.append(False)
list1.append('faf')
list1.append([45,67,9,0])
print(list1)  # [12, 4, 5, 55, False, 'faf', [45, 67, 9, 0]]
​
# 2.list.extend(iterable)在列表末尾一次性追加另一个序列中的多个值(用新列表中的元素扩展原来的列表)
# iterable:list tuple  dict set str等
list2 = [12,4,5]
print(list2)
list2.extend('abc')
list2.extend([45,7])
list2.extend((56,8))
print(list2)   # [12, 4, 5, 'a', 'b', 'c', 45, 7, 56, 8]
'''
注意:
    a.extend只能添加iterable类型的数据
    b.添加进去的数据不包含容器本身
'''
​
# 3.list.insert(index,obj)将数据插入到列表的指定索引处,原元素向后顺延
list3 = [34,8,10]
print(list3)
list3.insert(1,88)
print(list3)   # [34, 88, 8, 10]
​
# 需求:将数据插入到末尾
# 【面试题】注意:insert也可以实现追加元素的效果,当index >= len()
# list3.insert(4,'abc')
# print(list3)   # [34, 88, 8, 10, 'abc']
​
# 需求:将数据插入到开头
list3.insert(0,'abc')
print(list3)   # ['abc', 34, 88, 8, 10]
1.2删
# 1.list.remove(obj)移除列表中某个值的第一个匹配项   *******
# 2.list.pop(index)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值  ******
# 3.list.clear()清空列表
# 4.del list[index]
​
# 问题
# 注意:列表是可变的数据类型,所以一般情况下,但凡涉及到列表元素的更改,都是在原列表内部进行操作的,要查看结果,直接输出列表本身即可
list1 = [12,4,5]
r1 = list1.append(55)
print(r1)  # None
print(list1)  # [12, 4, 5, 55]
​
# 1.list.remove(obj)移除列表中某个值的第一个匹配项   *******
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
print(list1)
list1.remove(6)
print(list1)
​
# 问题1:删除列表中所有的6,则需要用到循环处理
# list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
# for _ in range(8):
#     list1.remove(6)
# print(list1)
​
# 问题2:元素不存在,ValueError: list.remove(x): x not in list
# 注意:删除列表中元素之前,建议尽量先判断元素在列表中是否存在
num = 10
if num in list1:
    list1.remove(num)
​
# 问题3:删除列表中所有的6
# 错误代码
'''
出现问题的原因:
    [34,6,87,9,34,6,6,6,6,6,6,6,8,12]--->0~1
    [34,87,9,34,6,6,6,6,6,6,6,8,12] ----> 2
    在遍历列表的过程中,同时删除该列表中的元素,会导致列表变短,所以循环结束的时候,有些元素还未来得及删除
'''
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
for num in list1:
    print(num)
    if num == 6:
        list1.remove(num)
print(list1)   # [34, 87, 9, 34, 6, 6, 6, 8, 12]
​
# 解决方案
'''
解决方案:
    a.将删除改为添加
    b.对列表进行备份【拷贝】,为了保证循环的次数不变,还是原列表的长度
'''
# 方式一  *******
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
new_list1 = []
for num in list1:
    if num != 6:
       new_list1.append(num)
print(new_list1)  # [34, 87, 9, 34, 8, 12]
​
# 方式二    ******
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
for num in list1.copy():  # 遍历备份之后的列表
    if num == 6:
        list1.remove(num) # 删除原列表
print(list1)   # [34, 87, 9, 34, 8, 12]
​
# 方式三:工作原理
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
i = 0
while i < len(list1):
    if list1[i] == 6:
        list1.remove(6)
        i -= 1   # 为了保证每个元素都可以被遍历到
    i += 1
print(list1)
​
# 2.list.pop(index)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值  ******
list2 = [34,6,87,9,34,6,8,12]
print(list2)
# a.默认删除列表中的最后一个元素
# list2.pop()
# print(list2)
​
# b.删除指定元素
# list2.pop(2)
# print(list2)
​
# c.pop:弹出,只是将指定索引处的元素从列表中弹出,并没有被销毁,而remove会直接销毁
r = list2.pop()  # r可以将pop之后的结果接出来,该结果表示被弹出的元素
print(r)  # 12
print(list2)
​
# 3.list.clear()清空列表
list3 = [34,6,87,9,34,6,8,12]
print(list3)
list3.clear()
print(list3)
​
# 4.del list[index]
list4 = [34,6,87,9,34,6,8,12]
print(list4)
del list4[0]
print(list4)
​
# 注意:
list4 = [34,6,87,9,34,6,8,12]
del list4    # 删除列表
# print(list4)  # NameError: name 'list4' is not defined
​
list4 = [34,6,87,9,34,6,8,12]
list4.clear()  # 清空列表
print(list4)  # []
1.3改
# 1.list.sort(key=None,reverse=False)对原列表进行排序       ******
# 2.list.reverse()翻转列表中元素   ******
# 1.list.reverse()翻转/反转/逆序列表中元素   ******
list1 = [34,6,87,9,34,6,8,12]
print(list1)
list1.reverse()
print(list1)
​
# 2.list.sort(key=None,reverse=False)对原列表进行排序       ******
# 注意:如果要对列表中的元素进行排序,一定要先保证列表中的元素是可以比较大小的
# a.升序
list1 = [34,6,87,9,34,6,8,12]
print(list1)
list1.sort()
print(list1)
​
# b.降序
list1 = [34,6,87,9,34,6,8,12]
print(list1)
list1.sort(reverse=True)
print(list1)
​
​
​
​
1.4查
# 1.len(list)获取列表元素个数       ********
# 2.max(list)返回列表元素最大值
# 3.min(list)返回列表元素最小值
# 4.list.count(obj)统计某个元素在列表中出现的次数  ******
# 5.list.index(obj)从列表中找出某个值第一个匹配项的索引位置
​
list1 = [34,6,87,9,34,6,8,12]
​
# 1.len(list)获取列表元素个数       ********
print(len(list1))
# 2.max(list)返回列表元素最大值
print(max(list1))
# 3.min(list)返回列表元素最小值
print(min(list1))
# 4.list.count(obj)统计某个元素在列表中出现的次数  ******
r1 = list1.count(34)
print(r1)
​
# 优化:删除列表中所有的6,则需要用到循环处理
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
c = list1.count(6)
for _ in range(c):
    list1.remove(6)
print(list1)
​
# 5.list.index(obj)从列表中找出某个值第一个匹配项的索引位置
list1 = [34,6,87,9,34,6,6,6,6,6,6,6,8,12]
i1 = list1.index(6)
print(i1)
​
# i2 = list1.index(10)   # ValueError: 10 is not in list
​
2.列表推导式【重点掌握】

列表推导式,就是指的轻量级循环创建列表的方式

列表推导式/列表生成式:是Python特有的语法,通过循环和if语句专门用来创建列表特点:根据一个已知的Iterable,使用一行代码实现简单的逻辑,生成一个新的列表

语法:[新列表中元素的规律 for循环 if判断]

工作原理:执行for循环,获取已知iterable中的元素,结合if进行判断,最终得到新的列表中元素的规律作用:生成列表

​
# 语法:[新列表中元素的规律       for循环     if判断]
​
# 1.已知一个数字列表nums = [1, 2, 5, 9],根据该列表生成一个新的列表,其中的元素是nums中每个元素的2倍,
# 例如:[1, 2, 5, 9]   -> [2, 4, 10, 18]
nums = [1, 2, 5, 9]
# 方式一
nums1 = []
for num in nums:
    nums1.append(num * 2)
print(nums1)
​
# 方式二
nums2 = [num * 2 for num in nums]
print(nums2)
​
# 问题:xx.append()的返回值的为None,相当于将None作为新列表中的元素
nums2 = [nums1.append(num * 2) for num in nums]
print(nums2)   # [None, None, None, None]
​
# 2.将1~100之间3的倍数挑出来,生成一个新的列表
# 方式一
list21 = []
for n in range(1,101):
    if n % 3 == 0:
        list21.append(n)
print(list21)
​
# 方式二
list22 = [n for n in range(1,101) if n % 3 == 0]
print(list22)
​
# 扩展
list22 = [n ** 2 for n in range(1,101) if n % 3 == 0]
print(list22)
​
# 3.在列表推导式中,for语句和if语句可以根据具体的需求书写多个,从左往右表示依次嵌套的关系
# a
list31 = [m + n for m in 'abc' for n in '123']
print(list31)
​
# 工作原理
list31 = []
for m in 'abc':
    for n in '123':
        list31.append(m + n)
print(list31)
​
# b.
list32 = [n for n in range(1,101) if n % 3 == 0 if n % 5 == 0]
print(list32)
​
list32 = []
for n in range(1,101):
    if n % 3 == 0:
        if n % 5 == 0:
            list32.append(n)
print(list32)
3.二维列表
# 1.一维列表
list1 = [34,67,8,9,'dada',False,34.1]
​
# 2.二维列表
list2 = [[12,4,6],[56,8,9,67,8,9],[3,5]]
​
# 3.二维列表中元素的访问
sublist1 = list2[0]
print(sublist1)
num1 = sublist1[1]
print(num1)
​
num2 = list2[-1][0]
print(num2)
​
# 3.遍历二维列表
# a.直接遍历元素
for sublist in list2:
    print(sublist)
    for num in sublist:
        print(num)
​
# 问题:
list3 = [[34,6,77],34,76,8,9,[34,6,8,9,90]]
for sublist in list3:
    print(sublist)
    if type(sublist) == list:
        for num in sublist:
            print(num)
    else:
        print(sublist)
​
# b.遍历索引
for i in range(len(list2)):  # 遍历外层列表
    print(i,list2[i])
    for j in range(len(list2[i])):     # 遍历内层列表
        print(list2[i][j])

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值