列表

it2022-05-05  125

列表

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

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

数组

特点:

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

创建

创建空列表

li=[]

创建多元素列表

li=[1,2,3,“abc”,“city”,“college”,[“i”,“love”]]

(拼接) li1=["i"] li2=["love","python"] print(li1+li2) #['i', 'love', 'python'] # li=[1,2,3,"abc","city","college",["i","love"]] # print((li,type(li))) # sr="abcd" # li=list(sr) # print((li,type(li)))

(2)重复

print(li2*3)

(3)索引,切片

li=[1,2,3,"abc","city","college","zhejiang"] print(len(li)) print((li[0],li[-7])) print(li[:5]) print(li[::-1]) print(li[4][1]) print(li[7][1]) #7 #(1, 1) #[1, 2, 3, 'abc', 'city'] #['zhejiang', 'college', 'city', 'abc', 3, 2, 1] #i

(4)列表的常见操作

增删改查

1.增

append()extend()insert(),按照索引和位置添加 li=["city","college"] print(id(li)) li1=["a","b","c"] li.append(li1) print((li,id(li))) #2109718996488 #(['city', 'college', ['a', 'b', 'c']], 2109718996488) li=["city","college"] li1=["a","b","c"] li.extend(li1) print(li) li.insert(1,li1) print(li) li[5]="6666" li[2:6]=["x","y","z"] print(li) #['city', 'college', 'a', 'b', 'c'] #['city', ['a', 'b', 'c'], 'college', 'a', 'b', 'c'] #['city', ['a', 'b', 'c'], 'x', 'y', 'z']

删除

pop(),返回被删除的元素

如果不指定索引,默认删除最后一个元素删除指定索引对应的元素 li=["a","b","c","d","e"] print(li.pop()) print(li)

remove(),移除第一次遇到的指定元素

li=["a","b","c","d","e","city","e"] print(li.remove("e")) print(li) #None #['a', 'b', 'c', 'd', 'city', 'e'] del li=["a","b","c","d","e","city","e"] del li[5] print(li) ['a', 'b', 'c', 'd', 'e', 'e'] clear() li=["a","b","c","d","e","city","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) li =["a","b","c"] for index,value in enumerate(li,2): print(index,value) #(2, 'a') #(3, 'b') #(4, 'c') #2 a #3 b #4 c

堆和栈,用列表实现

计数,count(),查找元素出现的次数反转,reverse()排序,sort()

input()函数实现往空列表内添加元素,当输入“q”时,结束输入,并返回列表

a=[] while True: x=input("请输入") if "q"in x: break else: a.append(x) print(a)

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

import random x=[] y=[] for i in range(1,31): a = random.randint(0, 10) x.append(a) for b in range(0,11): c=x.count(b) z=[b,c] y.append(z) print(y)

赋值与深浅拷贝

赋值

赋值是对对象的引用

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) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2352199011016 2352199011016 True [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]

深浅拷贝

浅拷贝会创建新对象,内容是原对象的引用

浅拷贝相当于我们只拷贝了一层,修改外层元素,就会修改引用,让他们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。

三种实现方法:

切片操作[:]工厂函数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) 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']] 2612515599880 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2612515601160 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

格式:

[表达式 for 迭代元素 in 可迭代对象]

实现原理:

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

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

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

sr= "城市学院" print([ord(x)for x in sr]) # [22478, 24066, 23398, 38498] y=10 x=y+1 if y>10 else y-1 print (x) #9

带过滤功能格式

[exp for iter_val in 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', 'python'], ['tom', 'java']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['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++']] [['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]

‘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++’]]


最新回复(0)