在python中,列表和元组都是非常常用的数据结构,用来存储一组有序的数据,并且可以为不同的数据类型。
目录
7.3 插入 列表名.insert(index,插入的元素)
10.2 查找列表中指定元素个数 列表名.count(指定元素)
11.1 排序 列表名.sort(reverse=False)
语法2:[表达式 for 临时变量 in 可迭代对象 if 条件表达式]
前言
在Python中,列表(List)和元组(Tuple)都是用来存储多个元素的数据结构,它们的主要区别在于列表是可变的(Mutable)而元组是不可变的(Immutable)。
列表、元组和【python】字符串(Str)-优快云博客该文中提到的字符串在python中被称为序列类型,即从左往右进行读取。序列类型,都可以用索引进行操作,并且都能存取多种数据类型。
正文
一、列表(List)
1、定义:在[ ]内,用逗号隔开的多个数据
列表的是用来一次性存储多个数据,并且程序员可以对这些数据进行增删改查的操作。
language = ['c++','python','c']
print(language,type(language)) # ['c++', 'python', 'c'] <class 'list'>
2、索引取值
语法:列表名[index]
与字符串索引取值方式一致,需要注意的是列表中的子列表,只占据一个索引位置
language = ['C++', 'Python', 'c语言']
print(language[0]) # C++
print(language[-1]) # c语言
print(language[0][0]) # C
# 列表中的子索引只占据一个索引位置
li = [1, 2, [3, 4, 5]]
print(li[2]) # [3, 4, 5]
print(li[2][1]) # 4 嵌套取值
3、切片
取头不取尾,步长正负决定切取方向具体可以参考【python】字符串(Str)-优快云博客中关于切片的操作
# 和字符中切片类似
li = ['a', 'b', 'c', 'd', 'e']
# 取头不取尾,步长正负决定切取方向
print(li[1:4]) # ['b', 'c', 'd']
print(li[-1:-4:-1]) # ['e', 'd', 'c']
4、求长度 len()
li = [1, 2, 3, 4, 5, 6, 7, 8]
print(len(li)) # 8
5、成员运算符in和not in
用于判断列表是否包含某变量或常量、具体可以参考【python】字符串(Str)-优快云博客关于成员运算符的操作
li = [1, 2, 3, 4, 5, 6]
a = 1
b = 7
print(a in li) # True
print(b in li) # False
print(7 not in li) # True
print(1 not in li) # False
需要注意该函数只会查找最外层的列表,而不会查找子列表
li = [1, 2, 3, 4, 5, 6, [7, 8, 9]]
print(7 in li) # False
print(7 in li[6]) # True
6、列表的拼接 + *
a = [1, 2]
b = [3, 4]
print(a + b) # [1, 2, 3, 4] 将两个列表拼接成一个大列表
print(a * 4) # [1, 2, 1, 2, 1, 2, 1, 2] 将列重复拼接4次为一个大列表
7、列表添加元素
7.1、末尾添加 列表名.append(元素)
作用:整体添加,在列表末尾追加元素(常用)
li = [1, 2]
li.append(3)
print(li) # [1, 2, 3]
li.append('a')
print(li) # [1, 2, 3, 'a']
li.append(['c', 'd'])
print(li) # [1, 2, 3, 'a', ['c', 'd']]
7.2 分散添加 列表名.extend(可迭代对象)
作用:分散添加,将另一个类型(必须是可迭代对象)的元素拆开逐一添加到末尾
li = [1, 2]
li1 = [1, 2]
li.append('abc')
print(li) # [1, 2, 'abc']
li1.extend('abc')
print(li1) # [1, 2, 'a', 'b', 'c']
7.3 插入 列表名.insert(index,插入的元素)
作用:在指定的index位置插入元素,若指定位置有元素则原有元素往后移动,若指定位置超过列表长度则插在末尾。
li = [1, 2]
li.insert(1, 1.5)
print(li) # [1, 1.5, 2]
li.insert(10, 3)
print(li) # [1, 1.5, 2, 3]
8、列表删除
8.1 指定元素进行删除 列表名.remove()
作用:根据指定的元素值进行删除,删除的元素不存在直接报错
注意:该函数只会删除第一个指定的元素
li = [1, 2, 3, 4, 5, 4, 5]
li.remove(4) # 删除第一个为7的元素,后面的元素就会往前补位
print(li) # [1, 2, 3, 5, 4, 5]
li.remove(7) # 列表里没有改元素直接报错
8.2 指定位置删除 列表名.pop(index)
作用:根据指定的索引删除元素,pop(索引),如果不写索引,默认删除最后一个元素
li = [1, 2, 3, 4, 5, 4, 5]
li.pop(3) # 删除索引为3的元素,后面的元素就会往前补位
print(li) # [1, 2, 3, 5, 4, 5]
8.3 根据下标删除 del 列表名[索引]
作用:根据下标进行删除,超出下标范围就会报错
li = [1, 2, 3, 4, 5, 4, 5]
del li[3] # 删除索引为3的元素,后面的元素就会往前补位
print(li) # [1, 2, 3, 5, 4, 5]
del li[8] # 报错
9、修改列表元素的值
列表名[index] = 值
作用:通过索引直接赋值修改列表元素的值
li = [1, 2]
li[0] = 2
print(li) # [2, 2]
10、查询列表
10.1 通过元素查找下标 列表名.index()
作用:返回查找元素所在位置的下标,如果查找的元素不存在就报错
li = [1, 2, 3, 2, 3]
print(li.index(2)) # 查找2元素所在的位置,返回该位置的下标
print(li.index(2, 2)) # 指定开始查找的位置
print(li.index(4)) # 没找到4直接报错 ValueError: 4 is not in list
10.2 查找列表中指定元素个数 列表名.count(指定元素)
作用:统计指定元素在当前列表中出现的次数,如果查找的元素不存在则返回0
li = [1, 2, 3, 2, 3]
print(li.count(2)) # 2
print(li.count(4)) # 0 没有找到返回零
11、排序
11.1 排序 列表名.sort(reverse=False)
作用:对列表进行排序。reverse可省略,默认False升序(从小到大),当reverse=True表示降序
li = [1, 4, 1, 3, 4, 3, 6, 6, 3, 6, 7]
li.sort() # 默认reverse=False 升序
print(li) # [1, 1, 3, 3, 3, 4, 4, 6, 6, 6, 7]
li.sort(reverse=True)
print(li) # [7, 6, 6, 6, 4, 4, 3, 3, 3, 1, 1]
11.2 列表倒置 reverse
作用:将列表倒置,不会进行排序
li = [1, 4, 1, 3, 4, 3, 6, 6, 3, 6, 7]
li.reverse()
print(li) # [7, 6, 3, 6, 6, 3, 4, 3, 1, 4, 1]
因为列表是可变类型,所以对列表进行修改的函数都没有返回值,都是直接改变原有的列表。
二、列表推导式
列表推导式能快速生成一个列表,简化代码,提高程序的执行效率
语法1:[表达式 for 临时变量 in 可迭代对象]
作用:用一个表达式创建要给有规律的列表
li = [i for i in range(1, 11)]
print(li)
语法2:[表达式 for 临时变量 in 可迭代对象 if 条件表达式]
作用:根据if条件表达式,将符合条件的表达式,当作列表元素返回
print([i for i in range(1, 11) if i % 2 == 0]) # [2, 4, 6, 8, 10]
语法3:结合条件表达式(if else简写)
# if判断简写 条件表达式
print("True") if 1 else print("False") # True
# 列表推导式 列表推导式是返回for前面的一句语句,而if判断简写后算一句语句
print([0 if i % 2 == 0 else 1 for i in range(1, 11)])
三、元组 (Tuple)
1、定义 在()内,用逗号隔开的多个数据
一个元组可以存储多个任意数据类型,但元组内的数据是不能修改的,类似于不可变的列表。
需要注意元组只支持查询的操作,不支持增删改的操作
一般当我们需要记录多个固定且不允许随意修改的数据值时可以用元组保存
注意:在定义元组的时候,如果只有一个元素,必须在末尾加逗号。如果没有逗号,那python会认为小括号是包含的意思。
t = (1,2,3,'a')
print(t, type(t)) # (1,2,3,'a') <calss 'tuple'>
t1 = () # 空元组
t2 = (1,) # 只有一个元素必须加逗号,定义元组
t3 = (1) # 括号会被当成包含的意思,所以t3是int类型
2、元组的索引取值(与列表一样)
t = (1, 2, 3, 4, 5)
print(t[1]) # 2
3、元组切片(与列表一样)
t = (1, 2, 3, 4, 5, 6)
print(t[2:4]) # (3, 4)
4、成员运算符(与列表一样)
li = (1, 2, 3, 4, 5, 6)
a = 1
b = 7
print(a in li) # True
print(b in li) # False
print(7 not in li) # True
print(1 not in li) # False
5、计算长度len函数
t = (1,2,3,4,5)
print(len(t)) # 5
6、元组查询方法
6.1 元组.index() (与列表一致)
作用:根据元素查索引
t = (1,2,3,4,5)
print(t.index(2)) # 1
6.2 元组.count()
作用:统计某个值在元组中出现的次数
t = (1,2,3,1,3,4,1,3)
print(t.count(1)) # 3
注意事项 (重要)
不能修改元组里的元素,否则会直接报错
这里的不能修改是元组里索引对应的元素,不能直接修改,但是这个元素对应的是可变类型,可修改该类型的元素,但是不能替换该类型。
t = (1, 2, 3, 4, 5, [6, 7, 8])
# t[0] = 3 # 不能修改直接报错 TypeError: 'tuple' object does not support item assignment
t[-1].append(9) # t[-1]是一个列表可变类型,所以可以修改
print(t) # (1, 2, 3, 4, 5, [6, 7, 8, 9])
# t[-1] = [1, 2] # 替换t[-1]列表 报错
总结
列表和元组都很实用,东西很多但是有些用的少知道就好了。
欢迎指正!