列表 --> list # list是可变类型(列表中的内容可以修改)
两个相同的列表内存地址不同
1. 创建
-
列表可以通过方括号括起, 逗号分隔的一组值得到
-
一个列表可以包含不同的数据类型, 但通常使用时各个元素类型相同
-
list1 = [1, 2, 3, 4] print(type(list1)) # --> <class 'list'>
2. 索引
-
list1 = [1, 4, 9, 16, 25] print(list1[0]) # --> 1 print(list1[3]) # --> 16
3. 切片
-
list1 = [1, 4, 9, 16, 25] print(list1[:2]) # --> [1, 4] print(list1[2:4]) # --> [9, 16]
4. 嵌套列表
-
list2 = [[1, 2], [3, 4]] print(list2[0][1]) # --> 2 print(list2[1][0]) # --> 3 list2[0] = [] print(list2) # --> [[], [3, 4]]
5. 修改列表中的内容
-
给列表的索引赋值, 改变原索引位置的值
list1 = [1, 2, 3, 4, 5] list1[0] = 6 print(list1) # --> [6, 2, 3, 4, 5]
-
列表的切片赋值给另一个列表, 改变切片原位置的值
list1 = [1, 2, 3] list2 = [5, 6] list1[0:2] = list2 print(list1) # --> [5, 6, 3]
-
列表的切片也可以赋值给一个字符串(#会将字符串拆分开来放入列表中)
list1 = [1, 2, 3, 4] list1[1:3] = 'a' print(list1) # --> [1, 'a', 4] list2 = [1, 2, 3, 4] list2[1:3] = 'abc' print(list2) # --> [1, 'a', 'b', 'c', 4]
-
注意, 列表的切片不能赋值给不可迭代的对象, 例如 int
list1 = [3, 4, 5] list1[1:2] = 1 # --> TypeError: can only assign an iterable
-
列表也可以用’+'拼接
list1 = [1, 2] list2 = [3, 4] list1 += list2 # 这里相当于list1 = list1 + list2 print(list1) # --> [1, 2, 3, 4]
6. 列表的方法(函数)
语法 : list.函数名(参数1, 参数2)
注意 : 与字符串不同的是, 列表的方法会直接改变列表本身, 而不会提供一个返回值(大多数)
-
list.append(x) 将x添加到list末尾
list1 = [1, 2] list1.append(3) print(list1) # --> [1, 2, 3]
-
list.extend(list1) 将list1中的元素取出, 一个一个添加到list中
list_a = [1, 2] list_b = [3, 4] list_a.extend(list_b) print(list_a) # --> [1, 2, 3, 4]
-
list.insert(x, y) 将y添加到list的索引x的位置, # x --> 插入的位置, y --> 插入的元素
list1 = [1, 2, 3] list1.insert(0, 4) print(list1) # --> [4, 3, 2, 1]
-
list.pop(x) 把索引x对应的值弹出来, 相当于删除(根据索引来删除)
list1 = [1, 2, 3] # pop方法可以得到一个返回值, 返回值就是被弹出的元素 print(list1.pop(0)) # --> 1 print(list1) # --> [2, 3] # pop方法不传参数时, 默认弹出最后一个 list2 = [4, 5, 6] list2.pop() print(list2) # --> [4, 5]
-
list.remove(x) 直接删除list中的元素x
list1 = [1, 2, 3] list1.remove(2) print(list1) # --> [1, 3] # 注意, 如果列表中存在相同的元素, 则删除的是从左边找到的第一个 list2 = ['a', 'b', 'c', 'a', 'd'] list2.remove('a') print(list2) # --> ['b', 'c', 'a', 'd'] # 也可以用del删除列表中的元素 list3 = ['a', 'b', 'c'] del list3[0] print(list3) # --> ['b', 'c'] # 注意, 如果del list, 删除的是变量名 del list3 print(list3) # --> NameError: name 'list3' is not defined
-
list.index(x) 获取元素x在list中的索引(#同样也是从左边找到的第一个)
list1 = [0, 1, 2, 3, 'abc', 5] print(list1.index('abc')) # --> 4 # 也可以传三个参数, list.index(x, start, stop) # 后两个参数代表搜索的索引范围 list2 = [0, 1, 2, 3, 'abc', 5, 6, 'abc', 8] print(list2.index('abc')) # --> 4 print(list2.index('abc', 6, 8)) # --> 7
-
list.sort() 将list中的元素按从小到大的顺序排序
# 排序时list中的元素必须是相同类型, 不同类型不能比较 # 字符串比较大小比较的是对应的ASCII编号的大小, ASCII在文章末尾有介绍 list1 = [2, 4, 6, 1, 9, 3] list1.sort() print(list1) # --> [1, 2, 3, 4, 6, 9] list2 = [2, 1, 'a', 'b'] list2.sort() # --> TypeError: '<' not supported between instances of 'str' and 'int' list3 = ['c', 'a', 'd', 'b'] list3.sort() print(list3) # --> ['a', 'b', 'c', 'd'] # 也可以指定key参数来规定排序方式 # key参数需要是一个是函数, 可以是lambda表达式, 也可以是自定义的一个函数 list1 = [{'age': 18, 'name': '小明'}, {'age': 16, 'name': '小红'}] list1.sort(key=lambda i: i['age']) print(list1) # --> [{'age': 16, 'name': '小红'}, {'age': 18, 'name': '小明'}] # 这里的i是遍历list1得到的每一项 # list.sort(reverse=True) 从大到小(降序) # reverse参数可以控制升序还是降序, 默认为False list1 = ['a', 'ab', 'abc'] list1.sort(reverse=True) print(list1) # --> ['abc', 'ab', 'a']
-
list.count(x) 统计x在list中出现的次数
list1 = [1, 2, 2, 3, 4] print(list1.count(2)) # --> 2
-
list.reverse() 反转原列表中元素的顺序
list1 = [1, 2, 3, 4, 5] list1.reverse() print(list1) # --> [5, 4, 3, 2, 1]
-
list.clear() 清空列表
list1 = [1, 2, 3, 4] list1.clear() print(list1) # --> []
-
list.copy() 浅拷贝(如果拷贝对象中有引用对象, 则拷贝的是该引用对象的地址)
list_a = [1, 2, 3] list_b = [1, 2, 3, list_a] list_c = list_b.copy() print(list_c) # --> [1, 2, 3, [1, 2, 3]] # list_a 发生变化时, b、c都变,list_b发生变化时,c不变 list_a[1] = 'abc' print(list_b) # --> [1, 2, 3, [1, 'abc', 3]] print(list_c) # --> [1, 2, 3, [1, 'abc', 3]] list_b[1] = 'eee' print(list_c) # --> [1, 2, 3, [1, 'abc', 3]]
-
提到浅拷贝, 那么顺便在这里提一下深拷贝, 以示区分
# 深拷贝 : 第一次拷贝时就直接拷贝值 from copy import deepcopy list_a = [1, 2, 3] list_b = [1, 2, 3, list_a] list_d = deepcopy(list_b) list_a[0] = 'hello' # a变时, b变, d不变 print(list_b) # --> [1, 2, 3, ['hello', 2, 3]] print(list_d) # --> [1, 2, 3, [1, 2, 3]]
7. 列表推导式
-
语法 : list = [表达式 for 变量 in 范围 if 条件]
a = [i for i in range(5)] # [表达式 for 变量 in 范围] print(type(a)) # --> <class 'list'> print(a) # --> [0, 1, 2, 3, 4] b = [x for x in range(10) if x % 2 == 1] # [表达式 for 变量 in 范围 if 条件] print(b) # --> [1, 3, 5, 7, 9] c = [x + y for x in range(1, 5) for y in range(2, 6)] # 相当于双重循环 print(c) # --> [3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8, 6, 7, 8, 9] d = [[i for i in range(5)] for x in range(4)] # 生成嵌套列表 print(d) # -->[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
附 :ASCII
-
ASCII 美国信息交换标准码,是一套编码系统,具体的可以自行百度
-
ASCII对照表 :https://tool.oschina.net/commons?type=4
-
常用ASCII值
控制字符 ASCII值(编号) 0 – 9 48 – 57 a – z 97 – 122 A – Z 65 – 90