列表使用方括号括起来的[],每个元素以逗号分隔;
可以储存不同的数据类型数据
创建空列表
>>> li = [] >>> print(type(li)) <class 'list'>创建多元素列表
li = [1, 2, 3, 'abcd', 'city', 'collage', ["I", 'love', 'you']] print(li, type(li)) [1, 2, 3, 'abcd', 'city', 'collage', ['I', 'love', 'you']] <class 'list'>强转
sr = 'abcd' li = list(sr) print(li, type(li)) ['a', 'b', 'c', 'd'] <class 'list'>(1)拼接
li1 = ['I'] li2 = ["love", 'you'] print(li1 + li2) ['I', 'love', 'you'](2)重复
li1 = ['I'] li2 = ["love", 'you'] print(li2*3) ['love', 'you', 'love', 'you', 'love', 'you'](3)索引(偏移)[],切片[:],[::]
li = ['c', 'i', 't', 'y', 'city', 'college', 'zhejiang',['city', 'college', 'zhejiang']] print(len(li)) print(li[0], li[-7]) print(li[:5]) print(li[::-1]) print(li[7][1]) 8 c i ['c', 'i', 't', 'y', 'city'] [['city', 'college', 'zhejiang'], 'zhejiang', 'college', 'city', 'y', 't', 'i', 'c'] college(4)列表的常见操作
增删改查
####改
li = ['City', 'College', 'a', 'b', 'c'] li[4]='6666' print(li)####删
pop() 通过下标删除如果不指定索引,默认删除最后一个元素
删除指定索引对应的元素
li = ['a','b','c','d','e'] li.pop(2) print(li) ['a', 'b', 'd', 'e'] remove() 删除第一次遇到的指定元素 li = ['a', 'b', 'c', 'd', 'e','f','e'] li.remove('e') print(li) ['a', 'b', 'c', 'd', 'f', 'e'] del 删除列表释放空间 li = ['a', 'b', 'c', 'd', 'e','f','e'] del li[5] print(li) ['a', 'b', 'c', 'd', 'e', 'e'] li = ['a', 'b', 'c', 'd', 'e','f','e'] del li print(li) 报错 clear()清空列表里所有元素 li = ['a', 'b', 'c', 'd', 'e','f','e'] li.clear() print(li) [](1)元素遍历
li = ['a', 'b', 'c'] for i in li: print(i) a b c(2)索引遍历
li = ['a','b','c'] for i in range(len(li)): print(li[i]) a b c(3)枚举遍历
enumerate(). 对于一个可迭代的/可遍历的对象(如列表,字符串等)
将其组成一个索引序列,利用它,我们可以同时获得索引和值
li = ['a', 'b', 'c'] for i in enumerate(li, 2): print(i) (2, 'a') (3, 'b') (4, 'c') li = ['a', 'b', 'c'] for index,value in enumerate(li[:3],2): print(index,value) 2 a 3 b 4 c tp = ('a', 'b', 'c') for index, value in enumerate(tp[:3], 4): print(index, value) 4 a 5 b 6 c#####计数
count() 查找元素出现的次数#####反转
reverse() 将列表元素取反
li = list('abcd') print(li) li.reverse() print(li) ['a', 'b', 'c', 'd'] ['d', 'c', 'b', 'a']小练习
li1 = [‘a’, ‘b’, ‘c’, ‘d’] li2 = [‘c’, ‘d’, ‘e’, ‘f’] 输出两个列表的交集
1.input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。
li = [] while True: a = input('请输入元素:') if a == 'q': break else: li.append(a) print(li) 请输入元素:asd 请输入元素:qwe 请输入元素:q ['asd', 'qwe']2.随机生成30个0-10的随机整数,并统计每个数出现的次数, 返回的结果形式为[[0, 3], [1, 4], … , [10, 5]]
li = [] a = [] import random for i in range(30): a.append(random.randint(0, 10)) #randint两边都是可以取到的 print(a) sum = 0 for i in range(0, 10): li.append([i, a.count(i)]) sum += a.count(i) print(li) print(sum) [7, 7, 4, 8, 0, 2, 6, 7, 1, 3, 6, 9, 1, 0, 5, 7, 6, 4, 5, 8, 5, 7, 9, 1, 2, 9, 10, 9, 3, 1] [[0, 2], [1, 4], [2, 2], [3, 2], [4, 2], [5, 3], [6, 3], [7, 5], [8, 2], [9, 4]] 29赋值是对对象的引用
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la print(la) print(lb) print(id(la),id(lb)) print(la is lb) la[5]= 'aaa' print(la) print(lb) print(id(la),id(lb)) [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 4509876168 4509876168 True [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] 4509876168 4509876168深浅拷贝会创建新对象,内容是原对象的引用
三种实现方法:
切片操作[:]
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la lb2 = la[:] print(id(la),id(lb2)) 4342443976 4343154440工厂函数list(li)
copy模拟内的copy函数
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] import copy lb_copy = copy.copy(la) la[6][0]='bbb' print(la) print(lb_copy) [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']] [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']] la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] import copy lb_copy = copy.copy(la) print(id(la),id(lb_copy)) la.append('test') #添加原子类型,不会影响lb_copy print(la) print(lb_copy) 4490620872 4492049096 [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test'] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]深拷贝
import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_deepcopy = copy.deepcopy(la) print(la, id(la)) print(lb_deepcopy, id(lb_deepcopy)) la[6][1] = 'aaa' print(la) print(lb_deepcopy) [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 4501035080 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 4501033864 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]对象的引用
浅拷贝相当于我们只拷贝里一层,修改外层元素,会修改引用,让它们指向另一个位置
修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置
深拷贝拷贝对象的所有元素,包括多层嵌套的元素
因此,是开辟里一个新的内存储存区,和数据源没有关系了
列表解析式
li = [] for x in range(10): li.append(x) print(li) print([x for x in range(10)]) print([x for x in range(10) if x%2==0]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 2, 4, 6, 8]列表生成式,用来生成列表的特定的语法形式
sr = '城市学院' print([ord(x) for x in sr]) [22478, 24066, 23398, 38498]格式:
[表达式 for 迭代元素 in 可迭代对象]实现原理:
迭代[可迭代对象]中的每一个元素
每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
最后所有通过表达式计算的值以一个列表的形式返回
带过滤功能格式
[exp for iter_val in iter if if_condtion] li =[] for iter_val in iter: if if_condtion: li.append(iter_val) print(li) name = ['Tom', 'jack', 'lucy'] subject = ['python', 'java', 'c', 'c++'] li = [] for i in name: for j in subject: li.append([i, j]) print(li) [['Tom', 'python'], ['Tom', 'java'], ['Tom', 'c'], ['Tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']] name = ['Tom', 'jack', 'lucy'] subject = ['python', 'java', 'c', 'c++'] print([[i,j] for i in name for j in subject]) [['Tom', 'python'], ['Tom', 'java'], ['Tom', 'c'], ['Tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]有序
可以重复的
不可以更改的
符号使用()
不能添加元素
tp =() print(type(tp)) <class 'tuple'>需要在单元素后面添加逗号
tp =(1,) print(type(tp)) <class 'tuple'>包含多种数据类型
(1)拼接
a = ('I',) b = ('love', 'learning') c = a + b print(c) ('I', 'love', 'learning')(2)重复
a = ('I',) b = ('love', 'learning') c = a * 3 print(c) ('I', 'I', 'I')(3)索引(偏移)
(4)切片
索引查
切片查
index()
tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f')) print(tp.index('a')) print(tp[8].index('d')) 5 0不可增
不能删除某个元素,但可以全部删除
del
tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f')) del tp print(tp)最大值和最小值
tp1 = (4,7,3,8,2) print(max(tp1),min(tp1)) 8 2遍历
元素遍历
tp = ('a', 'b', 'c') for i in tp: print(i) a b c索引遍历
tp = ('a', 'b', 'c') for i in range(len(tp)): print(tp[i]) a b c枚举enumerate
tp = ('a', 'b', 'c') for i in enumerate(tp, 2): print(i) (2, 'a') (3, 'b') (4, 'c')嵌套
tp = (((1,2,3),(4,5,6),(7,8,9)),((11,12,13),(14,15,16),(17,18,19))) print(tp[1][1]) (14, 15, 16)