基本数据类型(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


原文地址:https://www.cnblogs.com/fanxss/p/10983000.html