• 基本数据类型(list,tuple)


    基本数据类型(list,tuple)

    python基本数据类型

    列表 (list)

    列表的概念

    • 列表是python的基础数据类型之⼀,列表中装的数据是没有限制的, 大小基本上是够用的
    • 列表使用[]来表示。 每个元素⽤' , '隔开⽽且可以存放各种数据类型:
    lst = [1, '哈哈', "吼吼", [1,8,0,"百度"], ("我","叫", "元", "组"), "abc", {"我叫":"dict字典"},{"我叫集合","集合"}]
    

    列表相比于字符串. 不仅可以存放不同的数据类型. ⽽且可以存放⼤量的数据. 32位 python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽且列表是有序的(按照你保存的顺序),, 可以切⽚⽅便取值.

    有索引和切片

    • (索引和切片参照字符串)
    #列表 与 字符串 切片打印出的 差异:
    # 列表 : (列表是可以发⽣改变的. 这⾥和字符串不⼀样)
    lst = ["麻花藤", "王剑林", "⻢芸", "周鸿医", "向华强"]
    print(lst[0]) # 获取第⼀个元素  麻花藤
    print(lst[1]) # 获取第二个元素
    print(lst[2]) # 获取第三个元素
    
    lst[3] = "流动强" # 注意. 列表是可以发⽣改变的. 这⾥和字符串不⼀样
    print(lst) # ['麻花藤', '王剑林', '⻢芸', '流动强', '向华强']
    
    # 字符串 :(切记, 字符串是不可变的对象, 所以任何操作对原字符串是不会有任何影响的)
    
    s0 = "向华强"
    s0[1] = "美" # TypeError: 'str' object does not support item assignment 不
    允许改变
    print(s0)
    

    列表步长 sep的坑

    • 不写步长: 任意替换, 只要写入步长: 替换的位置必须一一对应(切出来几个位置, 替换几个位置)
    lst = [1,2,3,4,5]
    lst[1:3] = (10,20)
    lst[1:3] = (10,20,30)
    lst[1:3,1] = (10,20,30)  # 报错
    lst[:-3:-1] = (100,200)
    lst[:-3:-1] = (100,200,300)  # 报错  写入步长 必须一一对应
    
    

    列表的增删改查

    新增

    append 追加

    • (默认加在列表最后)

    insert(索引,内容) 插入

    • insert(索引,"加入内容") 在指定位置加入有位置元素后移(可能会导致元素移动)

    extend 迭代添加

    • int 和 bool值 不可迭代

    底层运算

    extend :
    for i in list:
        print(list)
    
    # append :
    lst = ["麻花藤", "林俊杰", "周润发", "周芷若"]
    print(lst)
    lst.append("wusir")
    print(lst) # "麻花藤", "林俊杰", "周润发", "周芷若","wusir"
    
    # insert :
    lst = ["麻花藤", "张德忠", "孔德福"]
    lst.insert(1, "刘德华") # 在1的位置插⼊刘德华. 原来的元素向后移动⼀位
    print(lst)  # ["麻花藤", "刘德华","张德忠", "孔德福"]
    
    # extend :
    lst = ["王志⽂", "张⼀⼭", "苦海⽆涯"]
    lst.extend(["麻花藤", "麻花不疼"])
    print(lst)  # ["王志⽂", "张⼀⼭", "苦海⽆涯","麻花藤", "麻花不疼"]
    lst.extend("麻花藤")
    print(lst) # ["王志⽂", "张⼀⼭", "苦海⽆涯","麻花藤","麻花不疼","麻","花","藤"]
    

    删除

    pop 弹出去

    • 默认弹出去最后一个元素
    • pop 能点出删除的value 即: pop 有 返回值 例: print(el)

    remove 删除指定元素

    • 根据填入元素删除
    • 有重名的会默认删除第一个(从左向右)
    • 删除不存在的元素会报错

    clear 清空

    • 清空列表里的元素

    del 切⽚删除 比较灵活

    • del lst[] []里支持索引 切片 删除
    # pop :
    lst = ["麻花藤", "王剑林", "李嘉诚", "王富贵"]
    deleted = lst.pop() # 删除最后⼀个
    print("被删除的", deleted) # 被删除的 王富贵
    print(lst) # ["麻花藤", "王剑林", "李嘉诚"]
    
    el = lst.pop(2) # 删除2号元素   删除索引
    print(el) # 李嘉诚
    
    # remove :
    lst.remove("麻花藤") # 删除指定元素
    print(lst)
    # lst.remove("哈哈") # 删除不存在的元素会报错
    # # print(lst)
    
    # clear :
    lst.clear() # 清空list
    print(lst) # None
    
    # del :
    del lst[0]
    print(lst)  # ["王剑林", "李嘉诚", "王富贵"]  切掉指定位置上的元素
    del lst[1:3] # 切掉 索引里的 1和3位置上的元素 
    print(lst)  # ["麻花藤","李嘉诚"]
    del lst[::2] # 从头到尾 每两位切一个,切掉 1 3 位元素
    print(lst)  #  ["王剑林","王富贵"]
    

    修改 : (索引切片修改)

    lst = ["太⽩", "太⿊", "五⾊", "银王", "⽇天"]  # 一共5个元素
    lst[1] = "太污" # 把1号元素修改成太污
    print(lst) # ["太⽩", "太污", "五⾊", "银王", "⽇天"]
    lst[1:4:3] = ["麻花藤", "哇靠"] # 切⽚修改也OK. 如果步⻓不是1, 要注意. 元素的个数, 1-4一共选取3个元素,给了两个替换元素会报错, 步长step 若果不是1(默认是1)一定要注意需替换元素个数和替换元素个数
    print(lst) # 报错
    lst[1:4] = ["李嘉诚个⻳⼉⼦"] # 如果切⽚没有步⻓或者步⻓是1. 则不⽤关⼼个数
    print(lst) # 将1至3位元素替换成一个元素["李嘉诚个⻳⼉⼦"](依旧是顾头不顾尾,4号元素取不到)
    # 最终打印结果 : ["太⽩", "李嘉诚个⻳⼉⼦", "⽇天"]
    

    查询

    • 列表是⼀个可迭代对象, 所以可以进⾏for循环
    • 用切片和索引 也可以查
    for el in lst:
     print(el) # 打印列表里的每一位元素
    

    其他操作

    count 查询列表里元素出现次数

    sort 排序

    • 尽量是数字(汉语排序规则复杂尽量不要用)
    • lst.sort() # 排序. 默认升序
    • lst.sort(reverse=True) # 降序 此处的 reverse 是 一个排序的参数

    reverse 翻转

    • 可以理解为镜像 打印原列表

    sort 与 reverse 语法一样

    len 求列表长度(内置函数)

    # count :
    lst = ["太⽩", "太⿊", "五⾊", "银王", "⽇天", "太⽩"]
    c = lst.count("太⽩") # 查询太⽩出现的次数
    print(c) # 2 
    # sort :
    lst = [1, 11, 22, 2]
    lst.sort() # 排序. 默认升序  
    print(lst) # [1,2,11,22]
    lst.sort(reverse=True) # 降序  此处的 reverse 是 一个排序的参数
    print(lst) # [22,11,2,1]
    
    # reverse  列表镜像
    lst = ["太⽩", "太⿊", "五⾊", "银王", "⽇天", "太⽩"]
    print(lst) # ["太⽩", "太⿊", "五⾊", "银王", "⽇天", "太⽩"]
    lst.reverse()
    print(lst) # ['太⽩', '⽇天', '银王', '五⾊', '太⿊', '太⽩']
    
    # len 
    l = len(lst) # 列表的⻓度
    print(l)
    
    
    

    列表的嵌套

    • 采⽤降维操作.⼀层⼀层的看就好. (剥洋葱皮,一层一层来)
    lst = [1, "太⽩", "wusir", ["⻢⻁疼", ["可⼝可乐"], "王剑林"]]
    # 找到wusir
    print(lst[2])
    # 找到太⽩和wusir
    print(lst[1:3])
    # 找到太⽩的⽩字
    print(lst[1][1])
    # 将wusir拿到. 然后⾸字⺟⼤写. 再扔回去
    s = lst[2]
    s = s.capitalize()
    lst[2] = s
    print(lst)
    # 简写
    lst[2] = lst[2].capitalize()
    print(lst)
    # 把太⽩换成太⿊
    lst[1] = lst[1].replace("⽩", "⿊")
    print(lst)
    # 把⻢⻁疼换成⻢化疼
    lst[3][0] = lst[3][0].replace("⻁", "化")
    print(lst[3][0])
    lst[3][1].append("雪碧")
    print(lst)
    
    
    

    元组 (tuple) 和 元组嵌套 (不常用)

    • 元组: 俗称不可变的列表.⼜被成为只读列表, 元组也是python的基本数据类型之⼀, ⽤⼩括 号括起来, ⾥⾯可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能改.

    • 关于不可变, 注意: 这⾥元组的不可变的意思是⼦元素(第一层元素)不可变. ⽽⼦元素内部的⼦元素是可以变, 这取决于⼦元素是否是可变对象.

    • 元组的作用: 在一些配置文件里,防误操作

    • 元组中如果只有⼀个元素. ⼀定要添加⼀个逗号, 否则就不是元组

      例:

    • 空元组表达方式

    • 元组也有索引和切片 count(), index(), len()等⽅法. 可以⾃⼰测试使

    #元组  tuple  
    tu = (1, "太⽩", "李⽩", "太⿊", "怎么⿊")  
    tu = tuple() # 空元组表达方式
    tu = (1,)    # 单元素元组表达方式  必须加一个"," 隔开
    
    # for循环遍历元组
    for el in tu:   # el 是 element (元素)的简写
      print(el)
    
    # 尝试修改元组
    # tu[1] = "⻢⻁疼" # 报错 'tuple' object does not support item assignment
    tu = (1, "哈哈", [], "呵呵")
    # tu[2] = ["fdsaf"] # 这么改不⾏
    
    tu[2].append("麻花藤") # 可以改了. 没报错
    tu[2].append("王剑林")
    print(tu)
    
    
    

    总结

    • 不可变数据类型: int str bool (元组)或(tuple)

    range (范围)

    • range可以帮我们获取到⼀组数据. 通过for循环能够获取到这些数据.

    range (1,10,2) 类似切片 默认step为1

    range(10) 默认start 为 0

    # range(边界) 从0到这个边界
    # range(start, end) 从start到end结束.取不到end
    # range(start, end, step) 从start到end. 步长是step
    for num in range(10):
     print(num)
    
    # range  可以遍历元素集并且有索引 
    lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"]
    for el in lst: # 这样循环. 没有索引
        print(el)
    
    for i in range(len(lst)):  # 有索引了
        print(lst[i])  ### 既取到了每个元素,又有索引
        
        
    tu = ("首页", "登录", "注册", "购物", "退出")
    for i in range(len(tu)):
        print(i+1,tu[i]) 
    # 1 首页
      2 登录
      3 注册
      4 购物
      5 退出
    
    
    

    易错题

    # 通过对li = [1, 3, 2, "a", 4, "b", 5, "c"]列表的切⽚
    形成新的列表l5, l5 = ["c"]
    li = [1, 3, 2, "a", 4, "b", 5, "c"]
    l5 = li[-1,]
    print(l5)  #  打印出来的是 "c"
    
    易错分析:
        l5 = li[-1]
        print(l5)  #  打印出来的是 c
    
    
    

  • 相关阅读:
    [bzoj1500][luogu2042][cogs339][codevs1758]维修数列(维护数列)
    无旋treap的简单思想以及模板
    [hdu2036]改革春风吹满地
    (treap)[bzoj3224][洛谷3369][cogs1829]Tyvj 1728 普通平衡树
    [bzoj3875][Ahoi2014]骑士游戏
    [bzoj1433][ZJOI2009]假期的宿舍
    <struct、union、enum>差异
    LeetCode(50) Pow(x,n)
    LeetCode(49)Group Anagrams
    LeetCode(48)Rotate Image
  • 原文地址:https://www.cnblogs.com/fanxss/p/10983000.html
Copyright © 2020-2023  润新知