python---[列表]lsit
内置数据结构(变量类型)
-list
-set
-dict
-tuple
-list(列表)
-一组又顺序的数据组合
-创建列表
-空列表
list1 = []
print(type(list1))
print(list1)
list2 = [100]
print(type(list2))
print(list2)
list3 = [2, 3, 1, 4, 6, 5, 6]
print(type(list3))
print(list3)
list4 = list()
print(type(list4))
print(list4)
运行结果:
<class 'list'>
[]
<class 'list'>
[100]
<class 'list'>
[2, 3, 1, 4, 6, 5, 6]
<class 'list'>
[]
-列表常用操作
-访问
-使用下表操作
-列表的位置是从0开始
list1 = [2, 3, 1, 4, 6, 5, 6]
print(list1[3])
print(list1[0])
运行结果:
4
2
-分片操作
-注意截取的范围, 包含左边的下标值,不包含右边的下标值
-下标值可以为空,如果不写左边下标值默认为0,右边下标值最大数加一,即表示截取最后一个数据
list1 = [2, 3, 1, 4, 6, 5, 6]
print(list1[:])
print(list1[:4])
print(list1[3:])
运行结果:
[2, 3, 1, 4, 6, 5, 6]
[2, 3, 1, 4]
[4, 6, 5, 6]
-分片可以控制增长幅度,默认增长幅度为1
list1 = [2, 3, 1, 4, 6, 5, 6]
print(list1[:])
print(list1[1:6:1])
print(list1[1:6:2])
运行结果:
[2, 3, 1, 4, 6, 5, 6]
[3, 1, 4, 6, 5]
[3, 4, 5]
-下标可以超出范围,超出后不在考虑多余下表内容
list1 = [2, 3, 1, 4, 6, 5, 6]
print(list1[2:10])
运行结果:
[1, 4, 6, 5, 6]
-下标值, 增长幅度可以为负数
-为负数,表明顺序是从右往左
-规定:数组最后一个数字的下标是-1
-分片之负数下标
-默认分片总是从左往右截取
-即正常情况,分片左边的值一定小于右边的值
list1 = [2, 3, 1, 4, 6, 5, 7]
print(list1[-2:-4])
print(list1[-4:-2])
print(list1[-2:-4:-1])
print(list1[-3:-5:-1])
运行结果:
[]
[4, 6]
[5, 6]
[6, 4]
-分片操作是生成要给新的list
-内置函数id,负责显示一个变量或者数据的唯一确定编号
a = 100
b = 200
print(id(a))
print(id(b))
c = a
print(id(c))
运行结果:
1967290496
1967293696
1967290496
100
-通过id可以直接判断出分片是从新生成了一份数据还是使用的同一份数据
-如果两个id之一样,则表明分片产生的列表是使用的同一地址同一份数据
-否则,则表明分片是重新生成了一份数据,即一个新的列表,然后把数据拷贝到新列表中
-通过id知道,list2和list3是同一份数据,验证代码如下:
list1 = [2, 3, 1, 4, 6, 5, 7]
list2 = list1[:]
list3 = list2
print(id(list1))
print(id(list2))
print(id(list3))
list1[0] = 100
print(list1)
print(list2)
list2[1] = 100
print(list2)
print(list3)
运行结果:
2252262765960
2252261913544
2252261913544
[100, 3, 1, 4, 6, 5, 7]
[2, 3, 1, 4, 6, 5, 7]
[2, 100, 1, 4, 6, 5, 7]
[2, 100, 1, 4, 6, 5, 7]
- List(列表)
1 1 # del删除 2 2 # 如果使用del之后, id的值和删除钱不一样, 则说明删除生成一个新的list 3 3 b = [1, 2, 3, 4, 5, 6] 4 4 print(id(b)) 5 5 del b[2] 6 6 print(id(b)) 7 7 print(b) 8 8 # del 一个变量之后不能在继续使用此变量 9 9 del b 10 10 print(b) 11 12 运行结果: 13 2429916837256 14 2429916837256 15 [1, 2, 4, 5, 6] 16 NameError: name 'b' is not defined
1 # 列表相加 2 # 使用加号连接两个列表 3 a = [1, 2, 3, 4] 4 b = [5, 6, 7, 8, 9] 5 c = ['a', 'b', 'c'] 6 d = a + b + c 7 print(d) 8 9 运行结果: 10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c']
1 # 使用乘号操作列表 2 # 列表直接跟一个整数相乘 3 # 相当于把n个列表连接在一起 4 a = [1, 2, 3, 4] 5 b = a * 3 6 print(b) 7 8 运行结果: 9 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
1 # 成员资格运算 2 # 就是判断一个元素是否在list里面 3 a = [1, 2, 3, 4, 5, 6, 7] 4 b = 8 5 c = 5 6 # 返回一个布尔值 7 print(b in a) 8 print(c in a) 9 运行结果: 10 False 11 True
1 # 成员资格运算 2 # 就是判断一个元素是否在list里面 3 a = [1, 2, 3, 4, 5, 6, 7] 4 b = 8 5 c = 5 6 # 返回一个布尔值 7 print(b in a) 8 print(c in a) 9 print(c not in a) 10 11 运行结果: 12 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] 13 False 14 True 15 False
1 # for i in list 2 a = [1, 2, 3, 4, 5] 3 for i in a: 4 print(i, end=" ") 5 print() 6 7 b = ["a", "b", "c", "d"] 8 for i in b: 9 print(i, end=" ") 10 print() 11 12 for i in range(1,10): 13 print(i, end=" ") 14 15 print(type(range(1, 10))) 16 17 # while 循环访问list 18 # 一般不使用while遍历list 19 c = [1, 2, 3, 4, 5, 6, 7] 20 lenth = len(c) 21 indx = 0 22 while indx < lenth: 23 print(c[indx], end=" ") 24 indx += 1 25 26 27 28 运行结果 29 1 2 3 4 5 30 a b c d 31 1 2 3 4 5 6 7 8 9 <class 'range'> 32 1 2 3 4 5 6 7
1 # 双层列表循环 2 # a 为嵌套列表, 或者叫双层列表 3 a = [["one", 1], ["two", 2], ["tree", 3]] 4 for k, v in a: 5 print(k, "--", v) 6 7 # b = [["one", 1, "eins"], ["two", 2], ["tree", 3, 4, 5, 6]] 8 # for k, v in b: 9 # print(k, "--", v) 10 # # 不能这么使用 11 12 c = [["one", 1, "eins"], ["two", 2, "zwei"], ["tree", 3, "drei"]] 13 for k, v, w in c: 14 print(k, "--", v, "--", w) 15 16 # 列表内涵:list content 17 # 通过简单的方法创作列表 18 # for 创建 19 a = ['a', 'b', 'c'] 20 #用list a创建一个list b 、 21 # 下面代码的含义是, 对于所有a中的元素, 逐个放入新列表b中 22 b = [i for i in a] 23 print(b) 24 25 # 对于c中所以元素乘以10, 生成一个新list 26 c = [1, 2, 3, 4, 5] 27 #用list c创建一个list d 、 28 # 下面代码的含义是, 对于所有c中的元素, 逐个放入新列表d中 29 d = [i*10 for i in c] 30 print(d) 31 32 # 还可以过滤原来list中的内容并放入新列表 33 # 比如有列表e, 需要把所有e中的偶数生成新的列表f 34 e = [x for x in range(1, 31)]#生成也1,30 的列表 35 # 把f中所以偶数生成一个新列表f 36 f = [m for m in e if m % 2 == 0] 37 print(f) 38 39 # 列表生成式可以嵌套 40 # 有两个列表a, b 41 a = [i for i in range(1, 4)]#生成list a 42 print(a) 43 b = [i for i in range(100, 400) if i % 100 == 0] 44 print(b) 45 46 # 列表生成式可以嵌套, 此时等于俩个for循环嵌套 47 c = [m+n for m in a for n in b] 48 print(c) 49 50 # 上面代码类似下面代码 51 for m in a: 52 for n in b: 53 print(m+n, end=" ") 54 print() 55 # len:求列表长度 56 a = [x for x in range(1, 100)] 57 print(len(a)) 58 # max:求列表中的最大值 59 print(max(a)) 60 b = ['man', 'film', 'python'] 61 print(max(b)) 62 63 # list:将其他格式的数据转换成list 64 a = [1, 2, 3] 65 print(list(a)) 66 s = "I love python" 67 print(list(s)) 68 69 # 把range产生的内容转换成list 70 print(list(range(12, 19)))
# 关于列表的函数
1 # 关于列表的函数 2 3 list1 = ['a', 'i love xj', 45, 766, 5+4j] 4 print(list1) 5 # append插入一个内容 6 a = [i for i in range(1,5)] 7 print(a) 8 a.append(100) 9 print(a) 10 # insert:指定位置插入 11 # insert(index, data), 插入位置是insert前面(完成后处于什么位置) 12 a.insert(3, 200) 13 print(a) 14 # del:删除 15 # pop, 从对应位拿出一个元素, 即把最后一个元素取出来 16 last_ele = a.pop() 17 print(last_ele) 18 print(a) 19 20 # remove:在列表中删除指定的值的元素 21 # 如果被删除的值没在list中,则报错 22 # 即, 删除list指定值的操作应该使用try。。。excepty语句,或者先进行判断 23 print(id(a)) 24 a.remove(200) 25 print(a) 26 print(id(a))
运行结果:
['a', 'i love xj', 45, 766, (5+4j)]
[1, 2, 3, 4]
[1, 2, 3, 4, 100]
[1, 2, 3, 200, 4, 100]
100
[1, 2, 3, 200, 4]
2354949945480
[1, 2, 3, 4]
2354949945480
1 # clear:清空 2 a = [1, 2, 3, 4, 5] 3 4 print(a) 5 print(id(a)) 6 a.clear() 7 print(a) 8 print(id(a)) 9 print("--------------") 10 # 如果不需要列表地址保持不变, 则清空列表可以使用以下方式 11 b = [1, 2, 3] 12 print(b) 13 print(id(b)) 14 b = list() 15 b = [] 16 print(b) 17 print(id(b))
运行结果:
[1, 2, 3, 4, 5]
1834734417288
[]
1834734417288
--------------
[1, 2, 3]
1834734417160
[]
1834734417160 #加上b = list()地址还是保持不变
# 如果不需要列表地址保持不变, 则清空列表可以使用以下方式
b = [1, 2, 3]
print(b)
print(id(b))
# b = list()
b = []
print(b)
print(id(b))
运行结果:
[1, 2, 3]
2191356032264
[]
2191355209608 #不加上b = list()地址会发生改变
1 # reverse:翻转列表内容,原地翻转 2 a = [1, 2, 3, 4, 5] 3 print(a) 4 print(id(a)) 5 a.reverse() 6 print(a) 7 print(id(a)) 8 9 运行结果: 10 [1, 2, 3, 4, 5] 11 1986270295432 12 [5, 4, 3, 2, 1] 13 1986270295432
1 # extend:扩展列表,两个列表,把一个直接拼接到后一个上 2 a = [1, 2, 3, 4, 5] 3 b = [6, 7, 8, 9, 10] 4 print(a) 5 print(id(a)) 6 a.extend(b) 7 print(a) 8 print(id(a)) 9 运行结果: 10 [1, 2, 3, 4, 5] 11 1657976485256 12 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 13 1657976485256
1 # count:返查找列表中指定值或元素的个数 2 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 3 print(a) 4 a.append(8) 5 a.insert(4, 8) 6 print(a) 7 a_len = a.count(8) 8 print(a_len) 9 10 运行结果: 11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 12 [1, 2, 3, 4, 8, 5, 6, 7, 8, 9, 10, 8] 13 3
1 # copy:拷贝, 浅拷贝 2 # 列表类型变量赋值实例 3 a = [1, 2, 3, 4, 5, 666] 4 print(a) 5 # list类型,简单赋值操作,是传地址 6 b = a 7 b[-1] = 777 8 print(a) 9 print(id(a)) 10 print(b) 11 print(id(b)) 12 13 print("*" * 20) 14 b = a.copy() 15 print(a) 16 print(id(a)) 17 print(b) 18 print(id(b)) 19 20 print("*" * 30) 21 b[-1] = 888 22 print(a) 23 print(b) 24 25 运行结果: 26 [1, 2, 3, 4, 5, 666] 27 [1, 2, 3, 4, 5, 777] 28 2546992182664 29 [1, 2, 3, 4, 5, 777] 30 2546992182664 31 ******************** 32 [1, 2, 3, 4, 5, 777] 33 2546992182664 34 [1, 2, 3, 4, 5, 777] 35 2546992182536 36 ****************************** 37 [1, 2, 3, 4, 5, 777] 38 [1, 2, 3, 4, 5, 888]
1 # cpoy:拷贝,浅拷贝和深拷贝区别 2 # 出现下面问题是,copy函数是个浅拷贝,即只可拷贝一层内容 3 a = [1, 2, 3, [10, 20, 30]] 4 b = a.copy() 5 print(id(a)) 6 print(id(b)) 7 print(id(a[3])) 8 print(id(b[3])) 9 10 a[3][2] = 666 11 print(a) 12 print(b) 13 14 运行结果: 15 2337052980168 #a和b的id不一样 16 2337053832456 17 2337053832584 #a和b内部深一层的id是一样的 18 2337053832584 19 [1, 2, 3, [10, 20, 666]] 20 [1, 2, 3, [10, 20, 666]]