内置数据结构(变量类型)
-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 b10 10 print(b)11 12 运行结果:13 242991683725614 242991683725615 [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 * 36 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 False11 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 False14 True15 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 循环访问list18 # 一般不使用while遍历list19 c = [1, 2, 3, 4, 5, 6, 7]20 lenth = len(c)21 indx = 022 while indx < lenth:23 print(c[indx], end=" ")24 indx += 125 26 27 28 运行结果29 1 2 3 4 5 30 a b c d 31 1 2 3 4 5 6 7 8 932 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 content17 # 通过简单的方法创作列表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, 生成一个新list26 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中的偶数生成新的列表f34 e = [x for x in range(1, 31)]#生成也1,30 的列表35 # 把f中所以偶数生成一个新列表f36 f = [m for m in e if m % 2 == 0]37 print(f)38 39 # 列表生成式可以嵌套40 # 有两个列表a, b41 a = [i for i in range(1, 4)]#生成list a42 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:将其他格式的数据转换成list64 a = [1, 2, 3]65 print(list(a))66 s = "I love python"67 print(list(s))68 69 # 把range产生的内容转换成list70 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 198627029543212 [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 165797648525612 [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] = 88822 print(a)23 print(b)24 25 运行结果:26 [1, 2, 3, 4, 5, 666]27 [1, 2, 3, 4, 5, 777]28 254699218266429 [1, 2, 3, 4, 5, 777]30 254699218266431 ********************32 [1, 2, 3, 4, 5, 777]33 254699218266434 [1, 2, 3, 4, 5, 777]35 254699218253636 ******************************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] = 66611 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]]