列表(list)
一、初识列表
1.定义
列表是一个可修改的,元素以逗号分割,以中括号包围的有序序列。
2.特点
有顺序,可重复,可修改,可存放不同数据类型的多个数据,由中括号包围
3.声明
- 列表名 = list()
- 列表名 = []
# 创建一个空列表
l1 = list() # 推荐,优先使用
l2 = [] # 不推荐,会和其他语言中数组混淆
# 创建一个非空列表
names = ["貂蝉","王昭君","杨玉环","西施"] # 推荐
age = list([17,18,19,20]) # 不推荐,语法繁琐
二、索引
列表是有序的序列,因此可以通过下标索引来获取元素
1.格式
列表名[索引值]
2.编号方式
- 从左到右(正向):从0开始,逐渐递增,最大索引值:长度-1
- 从右到左(反向):从-1开始,逐渐递减,最小索引值是:-长度
# 通过索引查看元素
names = ['zs','ls','ww','ml']
# 查看ww
print(names[2])
print(names[-2])
# 索引值要在正确范围内
print(names[8]) # 报错
三、切片
和索引类似,切片是通过冒号来访问一定范围内的元素,一次可以获取多个元素。
注意:切片是将序列拷贝,操作的是拷贝对象,不是原序列。也就是说,切片操作不会改变原数列的元素。
1.格式
列表名[start:stop:step]
- start :起始位置,包含在内,可省略,默认为第一个元素
- stop :结束位置,不包含在内,可省略,默认为最后一个元素。
- step:步长,可省略,默认为1,正数表示从左到右顺序,负数从右到左顺序
# 通过索引查看元素
age= [1,5,1,4,8,9,10,6]
# 将ls和 ww 取出来
age[1:3:1] # [5,1]
age[:1] # [1]
age[1:] # [5,1,4,8,9,10,6]
age[1:6:2] # [5,4,9]
age[::1] # 等价于 age[::],age[:] [1,5,1,4,8,9,10,6]
age[-3:-1] # [9,10]
age[3:1:-1] # [4,1]
# 将age倒序
age[::-1]
print(age) # 不影响原列表
2.注意事项
- 负数步长是从右到左遍历,所以负数步长的切片开始索引一定要大于结束索引
- 开始索引和结束索引是负数时,开始索引必须小于结束索引
四、列表的拼接(+)和重复(*)
1.拼接
print('hello'+' world !') # 'hello world !'
[1,2,3]+['zhangsan','lisi','wangwu']
[1, 2, 3, 'zhangsan', 'lisi', 'wangwu']
注意:只有相同类型的列表才能进行拼接操作。
2.重复
一个数字n乘以一个列表会产生一个新的列表,原来的列表会被重复n次
注意:n必须是整数
l1 = [1, 2]
l2 = l1 * 3
print(l2) # [1, 2, 1, 2, 1, 2]
五、赋值
lst = [1, 2, 3, 4, 5, 6]
# (1)变量数和列表元素个数一样
a, s, d, f, g, h = lst
print(a, s, d, f, g, h) # 1 2 3 4 5 6
# (2)变量数和列表元素个数不一样
# a,s,d,f = lst # 报错
# *可以把剩下的元素压缩,如果不剩为空,*只能有一个
a, s, d, *f = lst
print(a, s, d, f) # 1 2 3 [4, 5, 6]
a, s, d, f, g, h, *j = lst
print(a, s, d, f, g, h, j) # 1 2 3 4 5 6 []
a, s, d, *f, g = lst
print(a, s, d, f, g) # 1 2 3 [4, 5] 6
注意:变量数量和元素数量需保持一致。如果不一致需要用*变量名这种格式来接收多个元素值,与位置无关。
六 、增删改查
1.增加数据
方法 | 描述 |
---|---|
append(item) | 将item(整数、字符串、列表…)添加到列表末尾位置。 |
insert(pos,item) | 将item插入到指定位置。pos如果超过最大索引,将item加到末尾;pos如果小于最小索引,将item加到开头。 |
extend(iterable) | 末尾一次性追加另一个序列中的多个值。 |
lst = [1, 2, 3, 4, 5]
# append
lst.append(6) # [1, 2, 3, 4, 5, 6]
lst1 = lst.append(7) # None 列表的增加操作是在原列表上进行的,不会返回新列表
lst2 = lst.append(11,22,33,44,55) # 报错 append()一次只能添加一个值
# insert
lst.insert(2, '222') # [1, 2, '222', 3, 4, 5]
lst.insert(100, '99999') # [1, 2, 3, 4, 5, '99999']
lst.insert(-100, -8888) # [-8888, 1, 2, 3, 4, 5]
# extend
lst.extend("asdf") # [1, 2, 3, 4, 5, a, s, d, f]
lst.extend("") # [1, 2, 3, 4, 5]
lst.extend(" ") # [1, 2, 3, 4, 5, ' ']
lst.extend([9, 8, 7]) # [1, 2, 3, 4, 5, 9, 8, 7]
lst.extend([]) # [1, 2, 3, 4, 5]
lst.extend(range(1,100))
总结
- append()和insert()一次只能添加一个元素,添加多个需要用extend()
- extend()只有一个参数,且必须是一个可迭代对象,如果是空的,则什么也不添加。
2.删除数据
方法 | 描述 |
---|---|
pop(index) | 删除指定位置元素,不写默认为最后一个元素,并返回该元素的值。 |
remove(item) | 删除指定的一个数据,如果有多个,只删除第一个。没有返回值。 数据不存在会报错。 |
del 列表名[] | 删除列表中的数据或整个列表。del不是列表独有的方法,是Python的内置功能。 |
clear() | 清空列表数据。 |
i = [1, 2, 3, 4, 5, 6, 2]
# pop
li.pop() # 删除最后一个元素
# 删除指定位置元素
li.pop(3) # 删除元素4
li.pop(100) # 报错,索引错误
# remove
li.remove(3) # 删除元素3本身
li.remove(10) # 错误,元素不存在
li.remove(2) # 删除第一次出现的元素
# del
del li[3] # 删除一个元素
del li[2:5] # 删除多个元素
del li # 删除li这个列表
# clear
li.clear() # [] 清空li
3.修改数据
方法 | 描述 |
---|---|
列表名[index] | 列表名[index] = new_value。将值赋给指定位置元素。 |
reverse() | 顺序倒序。返回一个新列表。 |
sort() | 按照ASCII码表顺序进行排序,同种类型才可以比较。返回一个新列表。 |
# 列表名[index] = new_value
li = [1,2,3,4,5,6,2]
li[2] = 30 # [1, 2, 30, 4, 5, 6, 2]
li = [1, 2, 3, 4, 5, 6]
# reverse()翻转列表
li.reverse() # [6, 5, 4, 3, 2, 1]
# sort()排序
l2 = [1, 5, 6, 8, 31, 23, 5, 9]
l2.sort() # 正序 [1, 5, 5, 6, 8, 9, 23, 31]
l2.sort(reverse=True) # 倒序 [31, 23, 9, 8, 6, 5, 5, 1]
4.查询数据
方法 | 描述 |
---|---|
for循环遍历 | 查询列表中所有数据(一条一条的),自定义查看方式 |
直接使用列表名称 | 查看所有数据(中括号括起来的一条数据) |
index() | 查看某个数据第一次出现的位置,并返回下标 |
列表名[下标] | 查看某个位置的数据 |
count() | 查看某个数据出现的次数 |
# index()
li = [1, 2, 3, 4, 5, 6, 2]
li.index(2) # 1
li.index(10) # 报错
# count()
li.count(10) # 0
li.count(2) # 2
li.count(3) # 1
5.其他操作
方法 | 描述 |
---|---|
len(列表名) | 列表长度,即列表中元素个数 |
max(列表名) | 列表中元素最大值(数据类型相同,且可以比较) |
min(列表名) | 列表中元素最小值(数据类型相同,且可以比较) |
copy() | 复制列表 |
七、列表嵌套
li = [1,2,3,[4,5,6]]
print(li[1]) # 2
print(li[3][1]) # 5
print(len(li)) # 4
八、列表推导式(高级操作)
1.格式
变量名= [表达式 for 变量 in 列表]
变量名= [表达式 for 变量 in 列表 if 条件]
2.执行流程
遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算
或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式
# 案例1:将lst中每一个元素进行平方后放入到一个新列表中
lst = [1, 2, 3, 4, 5]
l2 = [i*i for i in lst]
# 案例2:将lst中的奇数放到一个新列表中
lst = [1, 2, 3, 4, 5, 6, 7, 8]
l3 = [i for i in lst if i % 2 == 1]
# 案例3.将一个嵌套列表转换成一个一维列表
#lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 转换成:lst2=[1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
l4 = [j for i in lst for j in i]
# 案例4:现在有一列表lst = [[1,2,3],[4,5,6],[7,8,9]]要求取出[1,4,7] 和 [1,5,9] 元素
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lst_1 = [i[0] for i in lst]
lst_2 = [lst[i][i] for i in range(len(lst))]
3.推导式好处和不足
- 优点:简化代码,提高代码的简洁性
- 不足:降低代码的可读性