初学Python03

it2022-05-05  101

(三)列表

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

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

特点

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

3.1创建

创建空列表:li = [ ]创建多元素列表: li =[1,2,3,“abcd”,“city”,[“i”,“love”,“you”]]强转: sr = “abcd” li = list(sr)

3.2拼接

li1 = ["I"] li2 = ["love"] print(li1+li2)

3.3重复

li1 = ["I"] print(li1*3)

3.4索引(偏移) [ ],切片[:],[: :]

li = ["C","i","t","y",["collage",1,2]] print(len(li)) print((li[0],li[-2])) #- 从右往左数第几个 print(li[:4]) print(li[4][0])

3.5列表的常见操作

(1)增

apppend( ) #整体插进去 li = ["city","College"] li1 = ["a","b","c"] li.append(li1) print(li) extend( ) #先取出来再插进去 li = ["city","College"] li1 = ["a","b","c"] li.extend(li1) print(li) insert( ) #按照索引添加 li = ["city","College"] li1 = ["a","b","c"] li.insert(1,li1) print(li)

(2)改

li = ["city","College",1,2,3] li[0] = 666 li[2:6] = ["x","y","z"] print(li)

(3)删除

pop(),返回被删除的元素 如果不指定索引,默认删除最后一个元素删除指定索引的对应元素 li = ["city","College",1,2,3] print(li.pop(2)) print(li) remove(),移除第一次遇到的指定元素 li = ["city","College",1,2,3,2] print(li.remove(2)) print(li) del li = ["city","College",1,2,3,2] del li[4] print(li)

clear() 全部清空

li = ["city","College",1,2,3,2] li.clear() print(li)

(4)查(遍历)

遍历

元素遍历 li = ["a","b","c","d"] for i in li: print(i) 索引遍历 li = ["a","b","c","d"] for i in range(len(li)): print(li[i]) 枚举遍历:

​ enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等)

li = ["a","b","c","d"] for i in enumerate(li,2): print(i)

​ enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值

li = ["a","b","c","d"] for index,value in enumerate(li[:2],2): print(index,value)

堆和栈,用列表实现

计数,count( ),查找元素出现的次数反转,reverse( )排序,sort( ), 按照ASCII码值排序 li = list("abcd") print(li) li.reverse() print(li) li.sort() print(li) li.sort(reverse=True) print(li)

练习

交集:

li1 = ["a","b","c","e"] li2 = ["a","c","f","g"] li3 = [] for i in range(len(li1)): for j in range(len(li2)): if li2[j]==li1[i]: li3.append(li2[j]) print(li3)

input()函数实现往空列表中添加元素,"q"的时候,结束输入,并返回列表。

li = [] while True: inp = input("请输入列表元素:\t") if inp == "q": break else: li.append(inp) print(li)

随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0,3],[1,4],…[10,5]]

import random ran_int = [] result_li = [] for i in range(30): ran_int.append(random.randint(0,10)) for i in range(11): result_li.append([i,ran_int.count(i)]) print(result_li)

(5)赋值与深浅拷贝

赋值是对对象的引用

la = [1,2,3,4,5,"a",["b1","b2"]] lb = la print(la) print(lb) print(la is lb) la[5] = "666" print(la is lb) #指向同一区域还是相同

深浅拷贝

浅拷贝会创建新对象,内容是原对象的引用(copy后最外层不会变,里层还是会一起变动)

三种方法实现

切片操作[:]工厂函数list(li)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.append("test") #添加原子类型,不会影响lb_copy print(la) print(lb_copy)

深拷贝

import copy la = [1,2,3,4,5,"a",["b1","b2"]] lb_deepcopy =copy.deepcopy(la) la[5] = ["aaa"] print(la,lb_deepcopy) la[6][0]="aaaaa" print(la,lb_deepcopy)

对象引用

浅拷贝:相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。深拷贝:拷贝对象的所有元素,包括多层嵌套元素。因此,是开辟了一个新的内部存储区,和数据源没有关系了。

(6)列表解析式

li = [] for x in range(10): li.append(x) print(li) print([x for x in range(10) if x%2==0])

(7)列表生成式

用来生成列表的特定语法形式

sr = "城市学院" print([ord(x) for x in sr])

格式:

[表达式 for 迭代元素 in 可迭代对象 if if条件] [exp for iter_val in iter if if_condtion] name = ["Tom","Jack","Alice"] 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])

实现原理:

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

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

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

(四)元组

有序可重复不可更改(地址不可更改,内容可以变)

符号使用():

定义:

4.1元组的创建

空元组的创建,不能添加元素

单元素元组的创建,需要在单元素后面加个“,”

li = [] tp = () print(type(tp)) tp = ("abc") print(type(tp)) tp = ("abc",) print(type(tp))

多元素元组的创建,包含多种数据类型

4.2拼接

tp = ("abc") tp1 = ("def") tp2 = tp+tp1 print(tp2)

4.3重复

tp1 = ("def") print(tp1*3)

4.4索引(偏移) 切片

tp = ("def",666,[1,2,3]) print(tp[0],tp[-2]) print(tp[2][0]) print(tp[:2])

4.5查

索引查

切片查

index( )

tp = ("def",666,"a","b","c",[1,2,3]) print(tp.index("a"))

增 不能操作

删 不能;但是可以全部删除 del tp(地址还是不变)

改 第一层不能操作

4.6最大值、最小值

tp = ("def","a","b","c") print(max(tp),min(tp))

4.7 遍历

元素遍历 tp = ("def","a","b","c") for i in tp: print(i) ``` - 索引遍历 ```python tp = ("def","a","b","c") for i in range(len(tp)): print(tp[i])

枚举enumerate

enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等) tp = ("def","a","b","c") for i in enumerate(tp,2): print(i) enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值 tp = ("def","a","b","c") for index,value in enumerate(tp[:2],2): print(index,value)

最新回复(0)