Python列表和元组

it2022-05-05  160

列表

列表使用方括号括起来的[],每个元素以逗号分隔;

可以储存不同的数据类型数据

创建

创建空列表

>>> 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)列表的常见操作

增删改查

append() 向列表里追加一个元素 li = ["City", "College"] print(id(li)) li1 = ['a', 'b', 'c'] li.append(li1) print(li, id(li)) sr = '城市学院' li = [] for i in sr: li.append(ord(i)) print(li) 4435955592 ['City', 'College', ['a', 'b', 'c']] 4435955592 [22478, 24066, 23398, 38498] extend() 向列表里追加另一个列表的所有元素 li = ["City", "College"] li1 = ['a', 'b', 'c'] li.extend(li1) print(li) ['City', 'College', 'a', 'b', 'c'] insert() 指定下标添加一个元素 li = ["City", "College"] li1 = ['a', 'b', 'c'] li.insert(1,li1) print(li)

####改

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']
排序
sort() sort(reverse=True) 将列表元素值进行降序排序sort(reverse=False) 将列表元素进行升序排序 li = [4, 2, 5, 9, 1] li.sort(reverse=True) print(li) li.sort(reverse=False) print(li) [9, 5, 4, 2, 1] [1, 2, 4, 5, 9]

小练习

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 可迭代对象]

实现原理:

迭代[可迭代对象]中的每一个元素

每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值

最后所有通过表达式计算的值以一个列表的形式返回

三目运算符
y =12 x = y+1 if y>10 else y-1 print(x) 13

带过滤功能格式

[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)

其他操作

tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f')) print('1' in tp) True

最大值和最小值

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)

最新回复(0)