主要内容:
- 1.列表 list
- 2.元祖 tuple
- 3. range
1. 列表 list
1.1 列表概述
- 列表是python的基础数据类型之一 , 它是以[ ] 括起来, 每个元素用' , '隔开而且可以存放各种数据类型:
- 列表相比于字符串.,不仅可以存放不同的数据类型. 而且可以存放大量的数据.
- 32位 python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.
1.2 列表的索引和切片
- 索引
lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"] print(lst[3]) #奥特曼 print(lst[-4]) #家有儿女 print(lst[-1][1:3]) #年包
- 切片
lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"] print(lst[1:3]) # 切片出来的是列表.#['西游记', '家有儿女'] print(lst[1:5:2]) #['西游记', '奥特曼'] print(lst[-1:-4:-2]) #['少年包青天', '奥特曼']
注意切最后一个元素加:才会形成list,else相当于提取元素
1.3 列表的增删改查
(1)新增:
- append()
lst = [] lst.append("周杰伦") # 追加 在最后添加, 效率比较高 lst.append("周芷若") lst.append("周公瑾") print(lst) #['周杰伦', '周芷若', '周公瑾']
- insert()
lst = ["刘德华", "渣渣辉", "古天乐", "陈小春"] lst.insert(2,"马德华") # 插入, 可能会导致元素移动 print(lst) #['刘德华', '渣渣辉', '马德华', '古天乐', '陈小春']
- extend()迭代增加
lst = ["刘昊然", "张一山", "徐峥", "黄渤"] lst.extend(["刘能", "赵四", "广坤"]) print(lst) #['刘昊然', '张一山', '徐峥', '黄渤', '刘能', '赵四', '广坤']
- ! 一定要注意append和extend的用法区别:
#对于append()若添加一个字符串就是讲字符串整体添加到list里, #而extend()实现此功能需要加[],若没有[],会将字符串的的每一个元素添加到list里
(2)删除 :
- remove()
lst = ["刘能", "广坤", "皮长山", "大脚"] lst.remove("广坤") lst.remove("大脚") print(lst) #['刘能', '皮长山']
- pop()
lst = ["刘能", "广坤", "皮长山", "大脚"] lst.pop(2) # 可以指定元素删除(索引) print(lst) #['刘能', '广坤', '大脚'] s1 = lst.pop() # 默认弹出最后一个 print(s1) #大脚 s2 = lst.pop() print(s2) #广坤 print(lst) # ['刘能']
- clear()
lst = ["语文", "数学", "地理", "历史", "英语", "化学"] lst.clear() # 清空 print(lst) #[]
- del
lst = ["语文", "数学", "地理", "历史", "英语", "化学"] # 可以切片删除 del lst[2] #['语文', '数学', '历史', '英语', '化学'] del lst[0] #['数学', '地理', '历史', '英语', '化学'] del lst[::2] #['数学', '历史', '化学'] print(lst)
-
注意pop()与del在格式上的区别 lis.pop() del lis[] 虽然空白位置都是索引,但括号不同
(3)修改
- 索引和切片的使用
lst = ["功夫", "大话西游", "少林寺", "无间道", "战狼", "战狼2"] lst[2] = "西西里的美丽传说" lst[-3] = "新世界" lst[1:3] = ["一步之遥"] lst[1:5:2] = ["胡辣汤", "烩面"] # 注意如果步长不是1. 那么元素的个数要匹配 print(lst)
(4)查找
- 使用for循环
# 列表是一个可迭代对象. 可以使用for循环 for el in lst: print(el)
注: 列表根据条件进行删除
- 直接的思维 (错误)
lst=["渣渣辉","古天绿","周星驰","吴孟达","陈小春"] lst.clear() for el in lst: # for 内部有一个变量来记录当前被循环的位置, 索引. lst.remove(el) # 直接删除. 是删不干净的. 原因是每次删除都设计到元素的移动. 索引在变.
- 正确的方式
# 先把要删除的内容保存在一个新列表中. 循环这个新列表. 删除老列表 lst=["渣渣辉","古天绿","周星驰","吴孟达","陈小春"] new_lst = [] for el in lst: new_lst.append(el) for el in new_lst: lst.remove(el) print(lst)
- 示例
lst = ["张无忌", "张三丰", "张翠山", "张嘉译", '刘嘉玲', "刘能", '刘老根'] # 删除姓张的人 new_lst = [] for el in lst: if el.startswith("张"): new_lst.append(el) for el in new_lst: lst.remove(el) print(lst)
1.4 列表的相关操作
- count()
lst = ["马化腾", "马云", "刘强东", "周鸿祎", "李彦宏", "马云", "马云"] print(lst.count("马云")) #3
注意count是对list的操作,会得到新的结果
- sort()
lst = [1, 8, 12, 1, 4, 6, 3] lst.sort() # 排序. 默认升序 print(lst) #[1, 1, 3, 4, 6, 8, 12]
lst = [1, 8, 12, 1, 4, 6, 3] lst.sort(reverse=True) # 倒叙排序 print(lst) #[12, 8, 6, 4, 3, 1, 1]
-
reverse()
lst = [1, 8, 12, 1, 4, 6, 3] lst.reverse() # 翻转 print(lst) #[3, 6, 4, 1, 12, 8, 1]
-
len()
lst = [1, 8, 12, 1, 4, 6, 3] print(len(lst)) # 求长度, 和字符串一样 #7
1.5 列表的嵌套
lst = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "alex", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]] lst[4][1][1] = lst[4][1][1].capitalize() print(lst)
2. 元组
2.1 元组的基本概念
- 元组就是不可变的列表, 元组使用()表示, 元素与元素之间使用逗号隔开, 数据类型没有限制, 只读列表 第一层不可变
huang = ("努尔哈赤", "皇太极", "顺治", "康熙", "雍正", "乾隆", "嘉庆") # huang[1] = "朱元璋" # 报错 'tuple' object does not support item assignment print(huang)
注:元组的不可变的意思是子元素不可变. 而子元素内部的子元素是可 以变, 这取决于子元素是否是可变对象
-
另外:
# 小括号在计算机里还表示算数优先级 # print((8+3)*7) tu = (1,) # 加了逗号, 就是元组了 tu = ("哈哈","呵呵","嘿嘿",) print(type(tu)) lst = list() # [] tu = tuple() # 空元组
2.2 元祖的索引和切片:
- 索引
# 元组也有索引和切片 和列表一样和字符串也一样 tu = ("iphone", "nokia", "砸核桃", "Lenovo", "HTC", "Honor") print(tu[-1]) # Honor print(tu[1:3]) #('nokia', '砸核桃') print(tu[1:5:2]) #('nokia', 'Lenovo')
- 切片
# 不可变指的是第一层元素不可变, 第二层取决于你的数据类型 tu = (1, 2, 5, ["胡辣汤", "滋滋冒油的大猪蹄子", "酱猪肘", "香喷喷的米饭", "脆皮炸鸡"]) tu[3].append("锅包肉") print(tu)
2.3 遍历
tu = ("孙悟空", "白骨精", "哪吒", "二师兄", "妲己") for el in tu: # element 元素 print(el)
5. range:
- range(边界) 从0到边界
# range() for i in range(10): # 0-9 没有10(切记) print(i)
- range(start, end) 从start到end ,不能到end
for i in range(3, 8): # 从3-8 没有8 print(i)
- range(start, end, step) 从start到end. 步长是step
for i in range(5, 10, 2): # 从5 到 10 步长是2 print(i)
另外:
lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"] # # for el in lst: # 这样循环. 没有索引 # # print(el) # for i in range(len(lst)): # 有索引了 print(lst[i])