一、列表
列表是python中重要的序列类型。
[数据1,数据2,...,数据n]
我们通过一对中括号[] ,将数据囊括起来,其基本操作依旧是增、删、改、查。
1.1 增加
1.1.1 append()
作用:添加一个数据,添加到列表的最后一位。
语法:
列表名.append(数据)
接下来,我们尝试一下append的使用方法:
li = [1,2,3,4,5]
# 用append方法往列表中追加元素
li.append('小樱')
print(li) # [1, 2, 3, 4, 5, '小樱']
# 如果追加两个元素会如何? -- 会报错
li = [1,2,3,4,5]
li.append('鸣人','佐助')
print(li) # 程序报错
# 但是可以追加一个列表,记住这里一个列表也是一个元素
li = [1,2,3,4,5]
li.append(['鸣人','佐助'])
print(li) # [1, 2, 3, 4, 5, ['鸣人', '佐助']]
# append方法会修改原函数,没有返回值
li = [1, 2, 3, 3, 5, 5, 7, 8, 9]
print(li.append('鸣人')) # None
append()方法追加的元素一定是最后一位,并且其没有返回值,是修改了原列表。
1.1.2 insert()
作用:添加一个数据到指定的位置。
语法:
列表名.insert(下标位置,数据)
接下来,我们尝试一下insert的使用方法:
# 用insert方法往列表中插入元素
li = [1, 2, 3, 3, 5, 5, 7, 8, 9]
li.insert(0,'小樱')
print(li) # ['小樱', 1, 2, 3, 3, 5, 5, 7, 8, 9]
1.1.3 extend()
作用:添加一个序列类型到最后一位,并且把序列类型拆分。
语法:
列表名.extend(序列类型)
# 用extend方法往列表追加元素
li = [1, 2, 3, 3, 5, 5, 7, 8, 9]
li.extend(['迪迦','斯坦杰娜'])
print(li) # [1, 2, 3, 3, 5, 5, 7, 8, 9, '迪迦', '斯坦杰娜']
append会把列表当成一个元素追加,而extend可以自动拆分成多个元素追加。
1.2 删除
1.2.1 pop()
作用:删除一个值,默认从最后一个开始删,也可以指定位置,被删除的值会作为返回值返回。
语法:
- 列表名.pop()
- 列表名.pop(下标)
# 默认删除最后一个元素
li = ['佐助', '鸣人', '娜美', '迪迦']
li.pop()
print(li) # ['佐助', '鸣人', '娜美']
# 指定位置删除元素
li = ['佐助', '鸣人', '娜美', '迪迦']
li.pop(1)
print(li) # ['佐助', '娜美', '迪迦']
# 删除的元素作为返回值返回
li = ['佐助', '鸣人', '娜美', '迪迦']
print(li.pop(2)) # 娜美
1.2.2 remove()
作用:删除一个指定的元素
语法:
列表名.remove(元素)
# 删除选中的元素
li = ['佐助','鸣人', '娜美', '迪迦']
li.remove('鸣人')
print(li) # ['佐助', '娜美', '迪迦']
# 没找到元素则报错
li = ['佐助','鸣人', '娜美', '迪迦']
li.remove('鸣人')
print(li) # 报错
1.2.3 clear()
作用:清空列表内的所有元素
语法:
列表名.clear()
# 直接将整个列表中的元素清空,变成空列表
li = ['佐助', '鸣人', '娜美', '迪迦']
li.clear()
print(li) # []
1.2.4 del
作用:全局删除,可以删除一个变量
语法:
del 列表名[下标]
# 删除指定下标的元素
li = ['佐助', '鸣人', '娜美', '迪迦']
del li[0]
print(li) # ['鸣人', '娜美', '迪迦']
# 可以删除整个列表
li = ['佐助', '鸣人', '娜美', '迪迦']
del li
print(li) # 报错,因为 del li 已经删除了列表
1.3 修改
1.3.1 单个修改
直接通过下标进行修改。
语法:
列表名[下标] = 数据
# 单个修改,通过下标
li = ['佐助', '鸣人', '娜美', '迪迦']
li[2] = '索隆'
print(li) # ['佐助', '鸣人', '索隆', '迪迦']
1.3.2多个修改
通过切片的方式进行修改。
语法:列表名[起点下标:终点坐标]= [数据1,数据2,...数据n]
# 多个修改,通过切片
li = ['佐助', '鸣人', '娜美', '迪迦']
li[3:5] = [100,1000]
print(li) # ['佐助', '鸣人', '娜美', 100, 1000]
# 修改的元素可以多余切片元素数量
li = ['佐助', '鸣人', '娜美', '迪迦']
li[3:5] = [20,200,2000,2000] # ['佐助', 1, 2, 20, 200, 2000, 2000, '娜美', '迪迦']
print(li) # ['佐助', '鸣人', '娜美', 20, 200, 2000, 2000]
1.4 查找
1.4.1 index()
作用:根据内容获取指定位置的下标,找不到会报错,返回下标值。
语法:
列表名.index(参数) # 参数是要找的内容
# 使用index()方法来查找数据,返回值是对应下标,找不到会报错
li = ['佐助', '鸣人', '娜美', '迪迦']
num=li.index('鸣人')
print(num) # 1
# index() 找不到数据,代码会报错
li = ['佐助', '鸣人', '娜美', '迪迦']
num=li.index('咕咕鸟')
print(num) # 报错
# index() 可以指定范围来查找 index(数据,下标)
li = ['佐助', '鸣人', '娜美', '迪迦', '鸣人']
num = li.index('鸣人', 1) # 从索引1之后开始查找'鸣人'
print(num) # 1
1.4.2 count()
作用:统计数据出现的次数
语法:
列表.count(要找的内容)
# 使用count()计算数据出现的次数
li = ['佐助', '鸣人', '娜美', '迪迦', '鸣人']
num = li.count('鸣人')
print(num) # 2
1.4.3 sort()和sorted()
作用:排序(全int 或者float的列表才可以排序)
语法:
列表名.sort() -->升序
列表名.sort(reserve = True) -->降序
sorted.(列表名) -->返回新列表
# 使用sort()排序
li1 = [33, 2, 1, 5, 6, 44, 77, 54, 1314, 520]
print(li1) # [33, 2, 1, 5, 6, 44, 77, 54, 1314, 520]
li1.sort()
print(li1) # [1, 2, 5, 6, 33, 44, 54, 77, 520, 1314] 升序
# 还可以降序
li1.sort(reverse=True)
print(li1) # [1314, 520, 77, 54, 44, 33, 6, 5, 2, 1] 降序
# sort()是在原列表上修改,而sorted()则会生成新的列表
li1 = [33, 2, 1, 5, 6, 44, 77, 54, 1314, 520]
li2 = sorted(li1)
print(li1) # [33, 2, 1, 5, 6, 44, 77, 54, 1314, 520]
print(li2) # [1, 2, 5, 6, 33, 44, 54, 77, 520, 1314]
# sorted也可以降序排列
li2 = sorted(li1,reverse=True)
print(li2) # [1314, 520, 77, 54, 44, 33, 6, 5, 2, 1]
1.5 列表生成式
在python中有着更简便的方法来生成/创建简单的列表,类似于之前的三目表达式,目的都是为了简化代码,通过一行代码就完成普通多行代码的功能。
练习1:生成[1,2,3,4,5,6,7,8,9]列表
li = []
for i in range(1,10):
li.append(i)
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 列表生成式写法
print([i for i in range(1,10)]) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
练习2:[1*1,2*2,...,9*9]
#普通写法
li = []
for i in range(1,10):
li.append(i*i)
print(li)
#列表生成式写法
print([i*i for i in range(1,10)])
带if 的列表生成式
# 求1-10的偶数生成列表
li = []
for i in range(1, 10):
if i % 2 == 0:
li.append(i)
print(li)
#列表生成式写法
print([i for i in range(1, 10) if i % 2 == 0])
双层循环写法
# 双层循环写法
li = []
for i in 'ABC':
for j in '123':
li.append(i + j)
print(li) # ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
print([i + j for i in 'ABC' for j in '123']) # ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
二、元组 tuple
元组一旦创立,其内容不可变,
如果元素数量固定,建议使用元组,因为占用的内存空间更小。
元组通常使用一对小括号将所有元素包围起来,但小括号不是必须的。
# 当多个值赋予变量的时候,就会以元组的形式
t = '火影忍者','海贼王'
print(t,type(t)) # ('火影忍者', '海贼王') <class 'tuple'>
2.1 查找
元组内容不能改变,所以没办法增加/删除/修改
2.1.1 count()
作用:统计某个元素在元组中出现的个数 ,类似于列表中的用法
语法:
元组名.count(数据) # 数据就是要查找的内容
# count(),使用方法和列表一样
t = (123,'Google','JD','TaoBao',123)
print(t.count(123)) # 2
print(t.count('JD')) # 1
2.1.2 index()
作用:从某个指定下标开始检索某个元素的下标值 ,类似于列表中的用法.
t = (123,'Google','JD','TaoBao',123)
print(t.index(123)) # 0print(t.index(123,2)) # 4
2.2 公共功能
1. 相加,两个元组相加生成一个新的元组
# 元组相加操作
data1 = ('张三','李四')
data2 = ('王五','赵六')
data3 = data1 + data2
print(data3) # ('张三', '李四', '王五', '赵六')
2. 相乘,元组*整型,倍数后生成一个新的元组
# 元组乘法操作
data1 = ('张三','李四')
print(data1*3) # ('张三', '李四', '张三', '李四', '张三', '李四')
3.获取长度 len()
data1 = ('张三','李四')
print(len(data1)) # 2
4.索引
# 索引操作,通过下标索引数据
data1 = ('张三','李四','王五','赵六')
print(data1[0]) # '张三'
print(data1[2]) # '王五'
5.切片
# 序列都可以进行的操作:切片
data1 = ('张三','李四','王五','赵六')
print(data1[0:3]) # '张三','李四','王五'
# 步长操作
data2 = ('张三','李四','王五','赵六','晓明')
print(data2[1:4:2]) # ('李四', '赵六')
6.for循环
# for循环遍历元组
data1 = ('张三','李四','王五','赵六')
for i in data1:
print(i)
注意:元组本身不可变,如果元组中包含其他可变元素,这些可变元素即可改变。
# 元组中的元素如果是可变类型,则这些类型自己本身可以改变
data = (99,88,77,['huoing',18],33)
print(data[3]) # ['huoing', 18]
data[3][0] = 'lufei'
print(data) # (99, 88, 77, ['lufei', 18], 33)