• 第五天-列表 元组


    一、列表

      简介:相比于字符串.不仅可以存放不同数据类型. 且可以存放大量数据.列表是有序(按照你保存的顺序),有索引,可以切片方便取值。

      lst = [1, '哈哈', "吼吼", [1,8,0,"百度"], ("我","叫", "元", "组"), "abc", {"我 叫":"dict字典"},{"我叫集合","集合"}] 

      列表的索引和切片:

      列表和字符串一样有索引

     1 #索引切片
     2 lis = ["麻花腾","王剑林","马芸","刘东墙","雷君"]
     3 print(lis[0]) # 索引获取元素
     4 print(lis[1])
     5 lis[3] = "流动墙"  # 与字符串不同 列表可发生改变
     6 print(lis)
     7 
     8 print(lis[0:3]) # 切片
     9 print(lis[-3:])
    10 print(lis[0::2]) # 带步长
    11 print(lis[-1:-5:-2]) # 倒着取

      列表的增删改查:

      注意, list和str是不一样的. lst可以发生改变. 所以直接就在原来的对象上进⾏了操作

     1 #新增 append,insert,extend
     2 #.append() 追加 添加到末尾
     3 lis = ["周杰伦","林俊杰","王力宏"]
     4 print(lis.append("?.,['+_']"))  # None 没还回值 打印为空
     5 lis.append("许巍")
     6 lis.append("周传雄")
     7 print(lis)
     8 
     9 # .insert() 插入 在某位置插入 原来的元素后移一位
    10 lis.insert(3,"徐良")
    11 print(lis)
    12 lis.insert(0,"许嵩") # 插入 索引变更 效率不高
    13 print(lis)
    14 
    15 #迭代添加 .extend()
    16 lis1 = ["周杰伦","林俊杰"]
    17 lis1.extend("王力宏") # 等同 ["王力宏"][0]
    18 print(lis1) # 迭代 ['周杰伦', '林俊杰', '王', '力', '宏']
    19 lis1.extend(["苏打绿"]) # 整体添加 不常用
    20 print(lis1)
     1 # 2.删除 pop,remove,clear,del
     2 # .pop() 弹出一个
     3 lis2 = ["天龙八部","笑傲江湖","倚天屠龙记","射雕英雄传","书剑恩仇录"]
     4 lis2.pop()
     5 print(lis2) # 默认弹出最后一个
     6 lis2.pop(3)
     7 print(lis2) # 弹出指定位置元素
     8 
     9 # .remove() 移除指定元素
    10 lis2.remove("倚天屠龙记")
    11 print(lis2)
    12 lis01 = ["天龙八部","笑傲江湖","倚天屠龙记","射雕英雄传","倚天屠龙记","书剑恩仇录"]
    13 lis01.remove("倚天屠龙记")  # 当有多个时 只移除第一个
    14 print(lis01)
    15 lis01.remove("雪山飞狐")  # 移除不存在元素会报错 ValueError: list.remove(x): x not in list
    16 print(lis01)
    17 
    18 # del 切片删除
    19 del lis2[0] # 类似pop
    20 print(lis2)
    21 del lis2[1:] # 批量删除
    22 print(lis2)
    23 del lis2[1:4:
     1 # 3.修改 索引切片
     2 lis02 = ["周星驰","周润发","周杰伦","周笔畅","周传雄"]
     3 # lis02[1] = "周树人" # 按索引修改
     4 # print(lis02)
     5 # lis02[0:3]="哇哈哈"  # 迭代修改(步长为1)
     6 # print(lis02)
     7 # lis02[0:3] = ["哇哈哈"] # 元素为列表 原3元素合为一个
     8 # print(lis02)
     9 lis02[::2] ="周树人","周作人","周星星"  # 步长不是1时 元素的个数必须匹配
    10 print(lis02)
    1 # 4.查询 for
    2 lis2 = ["天龙八部","笑傲江湖","倚天屠龙记","射雕英雄传","书剑恩仇录"]
    3 for shu in lis2:  # shu 表示列表中的每一项  lis2是一个可迭代对象
    4     print(shu )
     1 # 5.其他操作 .count() .sort() .reverse()
     2 lis = ["天龙八部","笑傲江湖","倚天屠龙记","天龙八部","射雕英雄传","书剑恩仇录"]
     3 c = lis.count("天龙八部") # 查找天龙八部出现的次数
     4 print(c) # 返回 2
     5 # .sort() 有序 排序
     6 lis1 = [1,2,45,6,3,78,96,24,57]
     7 # lis1.sort() # 排序 从小到大 升序
     8 # print(lis1)
     9 # lis1.sort(reverse = True) # 降序 从大到小
    10 # print(lis1)
    11 # 无序 翻转 .reverse()
    12 lis1.reverse()  # 翻过来
    13 print(lis1)
    14 print(len(lis1)) # 长度

    二、列表的嵌套

      列表嵌套:降维操作 一层一层看就好

     1 # 降维操作 一层一层看就好
     2 lis = [["香蕉","苹果","荔枝"],["咖啡","果汁","牛奶"],["煎饼","牛排","奶酪"]]
     3 print(lis[1][0])
     4 print(lis[2][1:]) # 找到牛排 奶酪
     5 print(lis[0][2][0])  # 降维 一层层找
     6 
     7 # 把煎饼中的饼换成蛋  注意嵌套修改时数据类型
     8 lis[2][0] = lis[2][0].replace("","")  # 多层嵌套的时候如果进行操作。 需要重新赋值。 原因是替换的内容是一个 字符串
     9 print(lis)  # [['香蕉', '苹果', '荔枝'], ['咖啡', '果汁', '牛奶'], ['煎蛋', '牛排', '奶酪']]
    10 
    11 lis[0][1] = "葡萄" # 内部元素是可变数据类型 可直接修改
    12 print(lis)

    三、元祖和元祖嵌套

      元祖:tuple 表示 与列表相比 除了不能增删改 其他与列表一样

      与列表类似由()组成,可放任何类型数据,内部元素用逗号隔开 但:只读不可改 可索引切片循环

    1 tup = ("001","张三","李四","王二","@$#.,")
    2 print(tup)
    3 print(tup[0]) # 索引
    4 print(tup[3])
    5 print(tup[0:3]) # 切片后仍是元祖 ('001', '张三', '李四')
    6 print(tup[0:4:2])

      元祖可改与不可改

    1 tup1 = ("周杰伦", "哇哈哈", "爽歪歪", ["酸酸乳", "三鹿奶粉", "AD钙奶"])
    2 # tup1[0] = "周笔畅" # 子元素 不可改
    3 tup1[3].append("优酸乳")
    4 print(tup1) # ('周杰伦', '哇哈哈', '爽歪歪', ['酸酸乳', '三鹿奶粉', 'AD钙奶', '优酸乳'])
    5 # 注意:不可变是子元素不可变.而子元素内的子元素可变,这取决于子元素是否是可变对象.
    6 # 元组的不可变. 元组的不可变指的是元组内部第一层元素的内存地址

      

      几个特殊情况

    1 lis =[] # 新列表
    2 lis1 = list() # 新列表
    3 print(lis,lis1)  # [] []
    4 
    5 tup1 = () # 元祖
    6 tup2 = tuple()# 元祖
    7 print(tup1,tup2)  # () () 空元组 不可改 无意义

      

      元祖若只有一个元素,必须加逗号

    1 # 元祖如果只有一个元素 必须加逗号
    2 tup3 = (1)
    3 tup3 = (1*(3-9)/8+9*4)  # () 可以是 运算符  优先级
    4 tup4 = ("爽歪歪",)
    5 print(tup3) # 不是元组
    6 print(tup4) # 是元组

    四、range

      range 可以快速获取一组数据 通过for循环获取这些数据

     1 # range   可以快速获取一组数据 通过for循环获取这些数据
     2 
     3 # 用while获取
     4 i = 0
     5 while i<100:
     6     print(i)
     7     i +=1
     8 
     9 # range 获取
    10 for i in range(100):
    11     print(i)
    12 
    13 for i in range(0,20,2):  # 每两个获取一个
    14     print(i)
    15 
    16 for i in range(20,0,-2):  # 反过来切片 也一样  [ ) 前闭后开
    17     print(i)

       打印出索引 + 元素

     1 # 打印出索引 + 元素
     2 lis = ["语文", "数学", "英语", "代数", "体育", "生物", "化学"]
     3 for i in lis:
     4     print(i)   # 默认for会忽略掉 索引号
     5 
     6 for i in range(len(lis)):
     7     print(i,lis[i])   # i 索引    lis[i] 获取元素
     8 
     9 e = "今天晚上要加班!"
    10 for i in range(len(e)):
    11     print(i,e[i])
  • 相关阅读:
    Leetcode [654] 最大二叉树 &[105] 从前序与中序遍历序列构造二叉树 & [106] 从中序与后序遍历序列构造二叉树
    Leetcode [226] 翻转二叉树 & [116] 填充每个节点的下一个右侧节点指针 & [114] 二叉树展开为链表
    Leetcode 链表&二叉树刷题总结
    Leetcode 动态规划刷题总结
    Leetcode [1312] 让字符串成为回文串的最少插入次数 动态规划
    Leetcode [234] 回文链表 回文 链表
    动态规划之 KMP 算法详解(转)
    Leetcode [99] 恢复二叉搜索树 二叉树
    统计代码行数
    二叉树遍历(递归、非递归、mirror)转
  • 原文地址:https://www.cnblogs.com/xi1419/p/9832046.html
Copyright © 2020-2023  润新知