Python学习03列表与元组

it2022-05-05  163

文章目录

列表数组创建(1)拼接(2)重复(3)索引 [ ] ,切片 [ : ], [ : : ](4)增删改查(5)元素遍历其他 练习赋值与深浅拷贝列表解析式 元组元组的创建空内元组的创建单元素元组的创建多元素元组的创建 使用

列表

列表使用方括号括起来的[ ], 每个元素以逗号分割;可以储存不同的数据类型

数组

特点:

是一个有序的可以重复的可变类型

创建

创建空列表 list1 = [] print(list1) 创建多元素列表 list1 = [1, 2, 3, 'abc', 'def', 'ghi', ['y','o', 'u']] print(list1,type(list1)) sr = 'abc' list2 = list(sr) print(list2,type(list2)) [1, 2, 3, 'abc', 'def', 'ghi', ['y', 'o', 'u']] <class 'list'> ['a', 'b', 'c'] <class 'list'>

(1)拼接

li1 = ['i'] li2 = ['want'] print(li1 + li2) ['i', 'want']

(2)重复

li1 = ['i'] li2 = ['want'] print(li1 * 3) ['i', 'i', 'i']

(3)索引 [ ] ,切片 [ : ], [ : : ]

li = ['c', 'i', 't', 'y', 'city', 'college', 'zhejiang'] print(len(li)) print(li[0], li[-7]) print(li[:5]) print(li[::-1]) print(li[6][1]) 7 c c ['c', 'i', 't', 'y', 'city'] ['zhejiang', 'college', 'city', 'y', 't', 'i', 'c'] h

(4)增删改查

增 append() extend() insert() li = ['City', 'College'] print(id(li)) li1 = ['a', 'b', 'c'] li.append(li1) print((li, id(li))) li = ['a', 'c'] print(id(li)) 2875353102664 (['City', 'College', ['a', 'b', 'c']], 2875353102664) 2875353133768 sr = '城市学院' li = [] for i in sr: li.append(ord(i)) print(li) [22478, 24066, 23398, 38498] li = ['n', 'b'] li1 = ['a', 'b', 'c'] li.extend(li1) print(li) li.insert(1, li1) print(li) li[5] = '5' print(li) li[2:5] = ['1', '2', '3', '4'] print(li) ['n', 'b', 'a', 'b', 'c'] ['n', ['a', 'b', 'c'], 'b', 'a', 'b', 'c'] ['n', ['a', 'b', 'c'], 'b', 'a', 'b', '5'] ['n', ['a', 'b', 'c'], '1', '2', '3', '4', '5'] 删 pop()#返回被删除的元素 #如果不指定索引,默认删除最后一个元素;删除指定索引对应的元素 remove()#移除第一次遇到的指定元素 del clear()

pop()

li = ['a', 'b', 'c', 'd', 'e'] print(li.pop()) print(li) e ['a', 'b', 'c', 'd']

remove()

li = ['a', 'b', 'c', 'd', 'e', 'city', 'e'] li.remove('e') print(li) ['a', 'b', 'c', 'd', 'city', 'e']

del

li = ['a', 'b', 'c', 'd', 'e', 'city', 'e'] del li[5] print(li)

clear()

li = ['a', 'b', 'c', 'd', 'e', 'city', 'e'] del li[5] print(li) li.clear() print(li)

(5)元素遍历

元素遍历 li = ['a', 'b', 'c'] for i in li: print(i) 索引遍历 li = ['a', 'b', 'c'] for i in range(len(li)): print(i) 枚举遍历 # enumerate() ,对于一个课迭代的/可遍历的对象(如列表,字符串) # 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[:2], 2): print(index, value) 2 a 3 b

其他

计数,count(), 查找元素出现的次数反转,reverse() li = list('abcd') print(li) li.reverse() print(li) ['a', 'b', 'c', 'd'] ['d', 'c', 'b', 'a'] 排序 li = list('abcd') li.sort() print(li) ['a', 'b', 'c', 'd'] li = list('abcd') li.sort(reverse=True) print(li) ['d', 'c', 'b', 'a']

输出两个表的交集

li1 = ['a', 'b', 'c', 'd'] li2 = ['c', 'd', 'e', 'f'] li3 = [] for i in li1: if i in li2: li3.append(i) print(li3)

练习

1.input() 函数实现往空列表中添加元素,当输入'q'时,结束输入,并返回列表。 li1 = [] sr = input("请输入:") while sr != 'q': li1.append(sr) sr = input("请输入:") print(li1) li = [] while True: inp = input(":") if inp == 'q': break else: li.append(inp) print(li) 2.随机生成300~10的随机,并统计每个数出现的次数,返回结果形式为[[0, 3], [1, 4],...., [10, 5]] import random rand = [] rout = [] li1 = [] li2 = [] for i in range(30): rand.append(random.randint(0,10)) for i in range(0,11): if i <= 5: li1.append([i, rand.count(i)]) else: li2.append([i, rand.count(i)]) rout.append([li1,li2]) print(rout) [[[[0, 3], [1, 2], [2, 3], [3, 2], [4, 4], [5, 3]], [[6, 2], [7, 3], [8, 5], [9, 1], [10, 2]]]]

赋值与深浅拷贝

赋值是对对象的引用 la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la print(la) print(lb) print(la is lb) [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] True la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la la[5] = 'aaa' print(la) print(lb) [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] 深浅拷贝

三种实现方法:

切片 [ ]

工厂函数list

copy模块内的copy函数

la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la lb2 = la[:] print(id(la), id(lb2)) import copy lb_copy = copy.copy(la) print(id(la), id(lb_copy)) la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la lb2 = la[:] print(id(la), id(lb2)) import copy lb_copy = copy.copy(la) print(id(la), id(lb_copy)) la.append('test') #添加原值类型,不会影响lb_copy print(la) print(lb_copy) 2005952492104 2005952492296 2005952492104 2005953952328 [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test'] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 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)

浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让它们指向另一个位置;

修改嵌套列表的元素,列表地址没有发生拜年话,指向的还是同一个位置。

深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存存储区,和数据是没有关系了。

列表解析式

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] 实现原理 迭代iter中的每一个元素 每迭代一次的结果赋值给iter_val元素,通过exp运算得到一个新的值 最后所有通过表达式计算的值以一个列表形式返回。

三目运算符

y = 10 x = y + 1 if y > 0 else y - 1 print(x) 11 [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) 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++']] [['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 = ('abc', ) #需要在单元素后面加一个逗号 print(tp,type(tp)) ('abc',) <class 'tuple'>

多元素元组的创建

包含多种数据类型

使用

拼接 tp1 = ('1', '2', '3') tp2 = ('4', '5', '6') print(tp1+tp2) ('1', '2', '3', '4', '5', '6') 重复 tp1 = ('1', '2', '3') tp2 = ('4', '5', '6') print(tp1 * 2) ('1', '2', '3', '1', '2', '3') 索引(偏移) 切片 tp2 = ('4', '5', '6') print(tp2[:3]) ('4', '5', '6') tp = (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc']) #因为是对元组中的列表进行改动,列表指向的地址没有改变,所以可以改 tp[5][2] = 'dd' print(tp) (1, 2, 3, 'a', 'b', ['aa', 'bb', 'dd'])

索引查

切片查

index

tp = (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc']) print(tp.index('a')) 3

不能

不能删除某个元素,可以全部删除

判断 tp = ('a', 'b', 'c') print('a' in tp) True tp = ('a', 'b', 'c') print(max(tp), min(tp)) c a 遍历

元素遍历

tp = ('a', 'b', 'c') for i in tp: print(i) a b c

索引遍历

tp = ('a', 'b', 'c') for i in range(len(tp)): print(i) 0 1 2

枚举遍历

tp = ('a', 'b', 'c') for i in enumerate(tp, 1): print(i) (1, 'a') (2, 'b') (3, 'c') tp = ('a', 'b', 'c') for i,j in enumerate(tp[:], 1): print(i,j) 1 a 2 b 3 c 嵌套 tp = ((1, 2, 3), (4, 5, 6), (7, 8, 9)) tp1 = (((1,2,3),(8,9),10),(4,5,6),7) print(tp[1][1]) print(tp1[0][1][1]) a = 2 b = 2 print(id(a), id(b), id(2))

最新回复(0)