python数据类型二
list 列表,可变的数据类型
列表和字符串一样也拥有索引
1 lst = ['动态','1','静态','编译','脚本'] 2 获取列表中元素索引位置 3 s = lst.index('编译') 4 print(s) 5 结果 6 3 7 8 根据列表索引取元素 9 print(lst[0]) 10 结果 11 动态 12 13 列表切片 14 print(lst[0:3]) #打印第0到第3个元素 15 print(lst[:4:2]) #打印第0到第4个元素,步长为2 16 print(lst[:-5:-1]) #-1倒序打印 17 结果 18 ['动态', '1', '静态'] 19 ['动态', '静态'] 20 ['脚本', '编译', '静态', '1']
增
1 .append(要追加的元素) 追加 2 lst = ['a','b','c'] 3 lst.append(8) 4 print(lst) 5 结果 6 ['a', 'b', 'c', 8] 7 8 .insert('要插入的位置(索引)',要插入的内容) 插入 9 lst.insert(2,True) 10 print(lst) 11 结果 12 ['a', 'b', True, 'c'] 13 14 .extend() 扩展,迭代添加(把传递进去的参数进行迭代) 15 lst.extend('bob') 16 print(lst) 17 结果 18 ['a', 'b', 'c', 'b', 'o', 'b'] 19 去除迭代添加 20 lst = ['a','b','c'] 21 lst.extend(['bob']) 22 print(lst) 23 结果 24 ['a', 'b', 'c', 'bob']
删
1 lst = ['bob',1,2,'bob',3,4,True,'bob'] 2 3 .remove() 移除(删除指定的元素,只能指定一个删除,一次只能删除一个) 4 lst.remove('bob') 5 print(lst) 6 结果 7 [1, 2, 'bob', 3, 4, True, 'bob'] 8 9 .pop() 弹出,默认删除最后一个,可以指定下标删除元素 10 .pop() 有返回值,返回的就是被删除的元素 11 s = lst.pop() 12 print(s) 13 print(lst) 14 结果 15 bob 16 ['bob', 1, 2, 'bob', 3, 4, True] 17 事例二 18 lst = ['bob',1,2,'bob',3,4,True,'bob'] 19 s = lst.pop(1) 20 print(s) 21 print(lst) 22 结果 23 1 24 ['bob', 2, 'bob', 3, 4, True, 'bob'] 25 26 .clear() 清空 27 lst.clear() 28 print(lst) 29 结果 30 [] 31 32 del 通过下标删除对应的元素 33 del lst[-2] 34 print(lst) 35 结果 36 ['bob', 1, 2, 'bob', 3, 4, 'bob'] 37 38 删除整个列表(报错,因为列表被删除,找不到此列表) 39 del lst 40 print(lst)
改
1 通过指定列表元素下标更改元素 2 lst = ['bob',1,2,'jrey',3,4,True,'alex'] 3 lst[3] = 'tom' 4 print(lst) 5 6 列表切片修改元素 7 lst = ['bob',1,2,'jrey',3,4,True,'alex'] 8 lst[0:5] = 'tom','jk' 9 print(lst) 10 结果 11 ['tom', 'jk', 4, True, 'alex'] 12 或 13 lst[0:5] = ['tom'] 14 print(lst) 15 结果 16 ['tom', 4, True, 'alex'] 17 18 如果步长不是1,元素的个数必须要和切片的个数一致(坑) 19 lst = ['bob',1,2,'jrey',3,4,True,'alex'] 20 lst[1:5:2] = ['tom','jack'] #如果这里是一个元素就会报错 21 print(lst) 22 23 事例 24 lst = ['bob',1,2,'jrey',3,4,True,'alex'] 25 lst[3] = lst[3].upper() 26 print(lst) 27 结果 28 ['bob', 1, 2, 'JREY', 3, 4, True, 'alex']
查
1 通过元素下标查询 2 print(lst[3]) 3 4 for循环查询 5 for i in lst: 6 print(i)
列表嵌套
一层列表叫做一维列表
二层列表叫做二维列表
三层列表叫做三维列表
1 lst = [1,2,3,'alex','wusir',True,False,[5,6,7,'jack',[18,'山谷','爱好',['可口可乐']]]] 2 lst1 = lst[7] 等于 [5,6,7,'jack',[18,'山谷','爱好',['可口可乐']]] 3 lst2 = lst1[-1] 等于 [18,'山谷','爱好',['可口可乐']] 4 lst3 = lst2[-1] 等于 ['可口可乐'] 5 lst4 = lst3[0] 等于 可口可乐 6 lst[7][-1][-1] 等于 ['可口可乐'] 7 print(lst[7][-1][-1][0]) 等于 可口可乐 8 print(lst[7][4][-3:-1]) 等于 ['山谷','爱好'] 9 10 追加列表中的元素 11 lst = [1,'大白','jack',['麻花疼',['可口可乐'],'王健林']] 12 lst[-1][-2].append('雪碧') 13 print(lst) 14 结果 15 [1, '大白', 'jack', ['麻花疼', ['可口可乐', '雪碧'], '王健林']]
练习题:
1 lis = [2, 4, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] 2 将列表lis中的"tt"变成大写(用两种方式) 3 lis[3][2][1][0] = lis[3][2][1][0].upper() #方法一,找到tt,用字符串操作符upper来改变列表中值的大小 4 lis[3][2][1][0] = 'TT' #方法二改变列表中的值 5 print(lis) 6 将列表中的数字3变成字符串"100"(用两种方式) 7 lis[3][2][1][1] = '100' #方法一,直接找到列表中的值,将其改变 8 lis[3][2][1][1] = str(lis[3][2][1][1] + 97) #方法二,用运算方法改变列表中的值 9 print(lis) 10 将列表中的字符串"1"变成数字101(用两种方式) 11 lis[3][2][1][-1] = int(lis[3][2][1][-1]) + 100 #方法一 12 print(lis) 13 14 lis[3][2][1][-1] = 101 #方法二 15 print(lis)
列表其他操作
1 列表相乘 2 lst = [1,2,3] 3 print(lst * 3) 4 结果 5 [1, 2, 3, 1, 2, 3, 1, 2, 3] 6 7 列表合并 8 lst = [1,2,3] 9 lst1 = [6,7,8,'a'] 10 print(lst + lst1) 11 结果 12 [1, 2, 3, 6, 7, 8, 'a'] 13 14 lst = [1,2,6,7,89,54,2,4,53,34,4,3] 15 查看列表中的元素个数 16 print(len(lst)) 17 结果 18 12 19 20 统计指定字符串个数 21 s = lst.count(3) 22 print(s) 23 结果 24 2 25 26 排序,默认升序(从小到大) 27 lst.sort() 28 print(lst) 29 结果 30 [1, 2, 2, 3, 4, 4, 6, 7, 34, 53, 54, 89] 31 32 降序(从大到小) 33 lst.sort(reverse=True) 34 print(lst) 35 36 反转列表 37 lst.reverse() 38 print(lst) 39 结果 40 [3, 4, 34, 53, 4, 2, 54, 89, 7, 6, 2, 1] 41 42 按照ASCII字母排序 43 lst1 = ['abex','baobao','dj','6','gg','hg','admin','baobao'] 44 lst1.sort() 45 print(lst1) 46 结果 47 ['6', 'abex', 'admin', 'baobao', 'baobao', 'dj', 'gg', 'hg']
tuple 元组
不可变的数据类型,有序,是一个不可以修改的列表,只能查看,可以for循环,可以切片,可以嵌套
1 元组的方法: 2 count 统计 3 index 索引 4 5 元组索引和切片 6 tu = ('bob',4,'tom',8,'jack') 7 print(tu[2]) 8 print(tu[2:4]) 9 print(tu[::2]) 10 结果 11 tom 12 ('tom', 8) 13 ('bob', 'tom', 'jack') 14 15 合并元组 16 tu = (1,2,3) 17 tu1 = (5,) + tu 18 print(tu*2) 19 print(tu1) 20 结果 21 (1, 2, 3, 1, 2, 3) 22 (5, 1, 2, 3) 23 24 元组索引 25 tu = (1,2,3,4,5,4,3,4,) 26 print(tu.index(3)) #第一个值的索引位置 27 print(tu.count(4)) #统计4在元组中有多少个 28 print(tu[:4]) #切片打印元组中前4个值 29 结果 30 2 31 3 32 (1, 2, 3, 4) 33 34 循环元组 35 for i in tu: 36 print(i) 37 结果 38 1 39 2 40 3 41 42 生成元组 43 tu = 1,2,3 44 print(tu,type(tu)) 45 结果 46 (1, 2, 3) <class 'tuple'> 47 48 列表转元组 49 l = ['a','b','c'] 50 tu = tuple(l) 51 print(tu,type(tu)) 52 结果 53 ('a', 'b', 'c') <class 'tuple'> 54 55 反转元组 56 t = (1,2,1,3,4) 57 print(t[::-1]) 58 59 获取元组长度 60 print(len(t)) 61 62 获取元组中最大的元素 63 print(max(t)) 64 获取元组中最小的元素 65 print(min(t)) 66 结果 67 (4, 3, 1, 2, 1) 68 5 69 4 70 1 71 72 比较两个元组 ==\!=\>\< 73 print((1,2) < (3,4)) 74 结果 75 True 76 77 判定某元素是否在这个元组中 in或not in 78 t = ('a','b','c') 79 print('a' not in t) 80 结果 81 False 82 83 拆包 84 a,b = (1,2) 85 print(a,b) 86 结果 87 1 2 88 89 a = 1 90 b = 2 91 a,b = (b,a) 92 print(a,b) 93 结果 94 2 1 95 96 元组嵌套 97 tu = (1,2,3,'a',False,[4,5,6],(8,7,9)) 98 print(id(tu[-2])) 99 tu[-2].append(7) #元组没改,改的是元素内部,没有改变元组的指向,不报错 100 print(tu) 101 print(id(tu[-2])) 102 print(tu[6][-3:-1]) 103 结果 104 2498382337224 105 (1, 2, 3, 'a', False, [4, 5, 6, 7], (8, 7, 9)) 106 2498382337224 107 (8, 7) 108 注意:由此得出元组只要定义,在元组中的任何操作都不改变元组创建的内存地址
元组面试题(坑)
1 空元组定义 2 tu = tuple() 3 print(type(tu)) 4 5 tu = (1,) #有逗号就是tuple类型 6 print(type(tu)) 7 tu = (1) #少一个逗号就是int类型 8 print(type(tu)) 9 结果 10 <class 'tuple'> 11 <class 'int'> 12 13 只要是用[]都是列表list 14 lst = [1] 15 print(type(lst)) 16 结果 17 <class 'list'>
id() 查看数据类型内存地址
1 print(id(a)) 2 #字符串和数字是不可变的数据类型
range #可以指定范围,类似于切片
1 切片与range格式对比: 2 [起始:终止:步长] #切片这么写 3 range(起始位置,终止位置,步长) 4 区别: 5 # python2.x 6 range() 列表 7 xrange() 生成器 8 # python3.x 9 range() 可迭代的,既不是生成器也不是迭代器
事例:
1 range(起始参数,终止参数,步长) 2 3 起始位置不写默认为0 4 print(range(5)) 5 结果 6 range(0, 5) 7 8 打印10到0,-1为降序打印 9 print(list(range(10,0,-1))) 10 结果 11 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 12 13 range获取的这个区间是可迭代的 14 for i in range(6): 15 print(i) 16 结果 17 0 18 1 19 2 20 3 21 4 22 5 23 24 使用for循环和range打印10到0之间的所有偶数(步长为2) 25 for i in range(10,-1,-2): 26 print(i) 27 结果 28 10 29 8 30 6 31 4 32 2 33 0 34 35 lst = ['a','b','c'] 36 for i in range(len(lst)): #i就是索引 lst[i]元素 37 print(i, lst[i]) 38 结果 39 0 a 40 1 b 41 2 c