列表/List
列表是一组使用方括号括起来的数据,元素中间使用逗号进行分隔,可以存放任意类型的对象,例如:list = [1, 'abc', [1, 2, 3], (1, 2, 3), {"A": "apple"}]
,是一个可变对象,所以可以进行增、删、改、切片等操作;
访问列表
访问列表中的元素同字符串类似,是根据下标(索引)进行访问,索引从左向右是正索引从0开始,依次1,2,3…等类推;索引从右向左是从-1开始的,依次是-2,-3,-4…类推,切片之后取到的数据仍是一个列表。
访问元素:list[下标值]
列表切片:list[起始值:终止值:步长] (步长不写的时候默认为1)
list1 = [1, 6, 8, 4, 10, 0, 1, 22]
print(list1[2]) # 打印列表下标为2的元素
print(list1[-1]) # 打印列表下标-1的元素
print(list1[:3]) # 打印列表从0-2下标的元素值,结果仍是列表
print(list1[2:5]) # 打印列表从2-4的元素值,切片取值范围是左开右闭(即不包含右边的第5个下标)
print(list1[::2]) # 打印从头到尾,步长为2的元素值
print(list1[::-1]) # 步长为-1从右开始打印元素,相当于倒叙打印列表
print(list1[5:2:-1]) # [0, 10, 4]
# 步长为-1,从右往左取值,又因为是按正数取得,所以取得是下标2-5之间的元素,又因为左开右闭原则,所以取不到下标2的数据 ,可以渠道下标为5的数据
print(list1[5::-1]) # [0, 10, 4, 8, 6, 1]
# 步长-1,倒序输出,取下标0-5的元素值,包含第5位元素
print(list1[:4:-1]) # [22, 1, 0]
# 步长-1,倒序输出,取下标4到最后的元素值,左开右闭原则,所以不能取下标为4的元素值
print(list1[:-3:-1])
# 步长-1,倒序输出,取下标-3到最后的值,左开右闭原则,所以下标-3的值取不到
print(list1[-3:]) # 打印下标-3到最后的值
打印结果:
8
22
[1, 6, 8]
[8, 4, 10]
[1, 8, 10, 1]
[22, 1, 0, 10, 4, 8, 6, 1]
[0, 10, 4]
[0, 10, 4, 8, 6, 1]
[22, 1, 0]
[22, 1]
[0, 1, 22]
更新列表元素
在列表中新增数据的函数有3种:
List.append(obj) 该函数无返回值,更新原列表(obj添加到列表末尾的对象);
List.insert(index,obj) 该函数无返回值,指定位置插入数值,如果不指定位置会报错 TypeError: insert expected 2 arguments, got 1(插入预期的2个参数,得到1)
;
List.extend(seq) 该函数无返回值,在列表末尾一次性最佳另一个序列中的多个值,seq–可以是列表、元组、集合、字典等,如果是字典,则仅把键当作元组依次添加到列表的末尾,如果参数为空则报错TypeError: list.extend() takes exactly one argument (0 given)(List.extend()只接受一个参数(给定0) )
;
list1 = [1, 6, 8, 4, 10, 0, 1, 22]
list2 = ['a', 'b', 'c']
dict1 = {'app':'apple', 'ble':'blue'}
list1.append(77) # 添加77到列表的末尾
print(list1.append(55)) # None无返回值
list1.insert(55, 44) # 添加4到下标55的位置
list1.extend(list2) # 把列表list2拼接到list1中
list1.extend(dict1) # extend()添加的是列表只会取到键当作元素放在列表中
print(list1) # 打印结果:[1, 6, 8, 4, 10, 0, 1, 22, 77, 44, 'a', 'b', 'c', 'app', 'ble']
删除列表元素
在列表中删除元素的函数有4种:
del List[index] 删除列表种指定下标的元素,更新列表,
不指定位置,则报错SyntaxError: invalid syntax(SyntaxError:无效的语法)
元素下标超出列表最大值,则报错IndexError: list assignment index out of range(IndexError:列表赋值索引超出范围 )
;
del list[start : end] del也可以删除中间一段连续的元素,start表示开始下标,end表示结束下标,会删除从start到end之间的元素,但是不包括end位置的元素,原理类似字符串和列表的切片取值,左开右闭;
List.pop([index = -1]) 有返回值,删除列表种的一个元素,默认最后一个元素,index不能超过列表总长度,否则报错:IndexError: pop index out of range(pop索引超出范围
);
List.remove(obj) 无返回值,移除列表种某一个值的第一个匹配项;
当列表中没有obj这个元素的时候,则报错:ValueError: list.remove(x): x not in list( x不在列表中)
;
使用该函数不填写obj的时候,报错:TypeError: list.remove() takes exactly one argument (0 given)(list.remove()只接受一个参数(0给出) )
;
List.clear() 无返回值,清空整个列表中的元素,即清空列表;
总结: 列表删除元素有4中方法,分为三个场景:
- 根据元素位置索引删除元素,del 和pop()方法;
- 根据元素本身删除,remove()方法;
- 删除列表全部元素。clear()方法;
# 列表的删除
# 注:以下代码的打印结果,都是打印单行,注释掉其他行的结果
list3 = [1, 6, 8, 4, 10, 0, 1, 22, 77, 44, 'a', 'b', 'c', 'app', 'ble']
del list3[0] # [6, 8, 4, 10, 0, 1, 22, 77, 44, 'a', 'b', 'c', 'app', 'ble']
# del list3[3:5] #[1, 6, 8, 0, 1, 22, 77, 44, 'a', 'b', 'c', 'app', 'ble']
# del list3[90] # IndexError: list assignment index out of range
# print(list3.pop(3)) # 返回值:4
# print(list3.pop(66)) # IndexError: pop index out of range
# print(list3.remove(1)) # None
# list3.remove() # list3 = [6, 8, 4, 10, 0, 1, 22, 77, 44, 'a', 'b', 'c', 'app', 'ble']
# list3.clear() # [] 清空列表
print(list3.clear()) # 无返回值
print(list3)
其他列表函数方法
注意:sort()函数方法不是和 int 和 str 类型的比较,否则会报错;
list1 = [1, 6, 8, 4, 10, 0, 1, 22]
list2 = ['a', 'b', 'c']
print("list1列表的元素长度:", len(list1)) # 打印列表元素个数
print("list1中最大的元素是:", max(list1)) # 返回列表最大值
print("list1中最小的元素是:", min(list1)) # 返回列表最小值
print("list2中最大的元素是:", max(list2))
print("list1中1出现的次数", list1.count(1)) # 同级列表中某个元素出现的次数
print("list1中1第一次出现的索引的位置:", list1.index(1)) # 在列表中找出某个元素第一个匹配的索引的位置
print("list1进行排序后:", list1.sort(reverse=False)) # 无返回值,对原列表进行排序,reverse指定排序规则,True降序,False升序(默认)
# print("list1的反向排序是:", list1.reverse()) # 列表反向排序
print(list1)
打印结果:
list1列表的元素长度: 8
list1中最大的元素是: 22
list1中最小的元素是: 0
list2中最大的元素是: c
list1中1出现的次数 2
list1中1第一次出现的索引的位置: 0
list1进行排序后: None
[0, 1, 1, 4, 6, 8, 10, 22]