一、什么是列表
列表是容器型数据,用[]表示
列表元素可以是任何数据类型,元素之间用逗号隔开
-
列表是有序的、可变的。
list1 = [1,2,3,4,'a','张三']
二、列表的增删改查
一、查
1、查询单个元素
-
使用下标查询,下标有正负两种之分,
下标不可越界
。正下标从0开始到n-1;负下标从最后一个开始,是负几就是倒数第几个。print(list[1]) #2 print(list[-2]) #a
2、查询多个元素(切片)
- 列表[开始下标:结束下标:步长]
- 步长可以省略,省略步长那么步长前面的冒号一起省略,默认步长为1。列表[开始下标:结束下标]
- 若省略开始下标,那么取结束下标前的所有数据,冒号不省略。列表[:结束下标:步长]
- 若省略结束下标,那么从开始下标开始取剩余所有数据(包含开始下标),冒号不省略。列表[开始下标::步长]
- 从开始下标开始取值,但是取不到结束下标的值,只能取到结束下标的前一个,切片下标值可以越界。
- 若步长为正,那么从前往后遍历元素;若步长为负,则从后往前遍历元素。
list1[1:4:2] #[2, 4]
list1[1:4] #[2, 3, 4]
list1[:4:2] #[1, 3]
list1[:4] #[1, 2, 3, 4]
list1[1::2] #[2, 4, '张三']
list1[1:] #[2, 3, 4, 'a', '张三']
list1[-7:-1:-1] #[]
list1[1:8:2] #[2, 4, '张三']
list1 [::2] #[1, 3, 'a']
二、改
- 列表[index] = 值 - 修改某个特定下标的值
- 列表[下标1:下标2] = [列表]- 修改某个范围的值,等号左右两边的值的个数可以不同
list1[2]=30 #[1, 2, 30, 4, 'a', '张三']
list1[1:3]=[10,20,30] #[1, 10, 20, 30, 4, 'a', '张三']
三、增
- append(元素) - 添加在列表的末尾
- insert(下标,元素) - 在给定下标的前面添加元素
- extend(序列) - 将序列中的元素添加到列表中(不会产生新的列表)
list1.append(60) #[1, 10, 20, 30, 4, 'a', '张三', 60]
list1.insert(3,50) #[1, 10, 20, 50, 30, 4, 'a', '张三', 60]
list1.extend([70,80,90]) #[1, 10, 20, 50, 30, 4, 'a', '张三', 60, 70, 80, 90]
四、删
- list.pop(下标) - 取出元素,默认取最后一个,取出后原列表中该元素将不存在
- del 列表[下标] - 删除列表中指定下标对应的元素(下标不能越界)
- list.remove(元素) - 若元素不存在,程序会报错;如果指定的元素存在多个,只删最前面的那个
list1.pop(-1) #90
del list1[2] #[1, 10, 50, 30, 4, 'a', '张三', 60, 70, 80]
list1.remove(80) #[1, 10, 50, 30, 4, 'a', '张三', 60, 70]
三、列表相关的函数操作
列表1 + 列表2 将列表1和列表2中的元素合并并产生一个新的列表
-
列表*N 或 N*列表 N是正整数,将列表中的元素重复n次产生一个新的列表
list1 = [1,2,3] list2 = ['a','b','c'] list1 + list2 #[1, 2, 3, 'a', 'b', 'c'] list1 * 2 #[1, 2, 3, 1, 2, 3]
-
== 和 !=
补充:
is 的用法
is 和 == 的区别:- == 判断的是存储的值是否相等;
- is 判断的是数据存储的地址是否相等。
注意:
给不同的变量赋相等的数字
或者字符串
,赋值之前系统会检查这个数字或字符串是否存在,
如果存在直接返回数据的地址给变量,不存在才开辟新的内存。
num1 = 10
num2 = 10
print(num1 == num2) #True
print(num1 is num2) #True
list3 = [1,2,3]
list1 == list3 #True
list4 = [2,1,3]
list1 == list4 #False 注意列表是有序的,除了值相等以外,元素所在的位置也要相同
list1 is list3 #False
- max(列表)
- min(列表)
注意:
此处列表中的元素类型
必须一致,并且支持比较运算。
- sorted(列表)- 将列表中的元素从小到大进行排序,产生一个新的列表,不会改变原列表。
- sorted(列表,reverse = True) - 将列表中的元素从大到小进行排序,产生一个新的列表。
注意:
此处列表中的元素类型
必须一致,并且支持比较运算。
- sum(列表) - 返回列表中所有元素的和
注意 :
列表中的元素必须全部是数字
。
- list(数据) - 将数据转换成列表
a. 所有的
容器型
数据类型的数据都可以转换成列表-
b. 将容器中的元素全部转换成列表中的元素
四、列表的相关方法
列表.clear - 清空列表
列表.copy() - 复制列表中所有元素产生一个新的列表
列表.copy() == 列表[:] == 列表+[] == 列表*1 - 浅拷贝
列表.count(元素) - 统计指定元素在列表中出现的次数
列表.extend(序列)- 将序列中的元素添加到列表中(不会产生新的列表)
-
列表.index(元素) - 获取指定元素在列表中的下标值(正下标值)
a. 如果元素不存在会报错
b.如果元素有多个,只返回最前面那一个的下标值 列表.index(元素,开始下标,结束下标)- 获取元素在列表中的下标,查找范围在开始下标到结束下标选中范围内(结束下标对应的值取不到)
列表.reverse() 将列表中的元素倒序(不会产生新的列表)
列表.sort()
-
列表.sort(reverse=True)
五、列表推导式
- [表达式 for 变量 in 序列] (可以按照下面的方式理解)
for 变量 in 序列:
表达式
让变量去序列中取值,每取一个值就创建列表中的一个元素,元素的值就是表达式的值
list2 = [x for x in range(4)]
print(list2) #[0, 1, 2, 3]
- [表达式 for 变量 in 序列 if 条件语句]
for 变量 in 序列:
if 条件语句:
产生元素
让变量去序列中取值,每取一个值就判断条件语句是否为True,如果为TRUE就创建一个列表元素,元素的值就是表达式的值.
list7 = [x**2 for x in range(6) if x % 2 ]
print(list7) #1,3,5的平方 [1, 9, 25]
- [表达式 for 变量1 in 序列1 for 变量2 in 序列 2]
for 变量1 in 序列 1:
for 变量2 in 序列2:
产生一个列表元素(值还是表达式结果)
list8 = [x*y for x in range(4) for y in range(3)]
print(list8) #[0, 0, 0, 0, 1, 2, 0, 2, 4, 0, 3, 6]
- [表达式 for 变量1 in 序列1 for 变量2 in 序列 2 if 条件语句]
list9 = [x+y for x in range(3) if x%2 for y in range(3)]
print(list9) #[1,2,3]