python列表详解-4

it2022-05-05  148

文章目录

1.列表1.1特点1.2创建1.3拼接1.4重复1.5索引(偏移),切片1.6增 删1.7遍历1.8补充函数1.9拷贝1.10迭代

1.列表

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

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

1.1特点

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

1.2创建

创建空列表

li=[]

创建多元素列表

li=[1,2,3,'a','gollege',['p','y','t']]

1.3拼接

li1=li2+li3

1.4重复

print(li1*3)

1.5索引(偏移),切片

li=['a','b','c','like','e','f'] print(len(li)) print((li[0],li[-1])) print(li[1:5]) print(li[::-1]) print(li[3][2]) #输出结果 6 ('a', 'f') ['b', 'c', 'like', 'e'] ['f', 'e', 'like', 'c', 'b', 'a'] k

1.6增 删

增:

append() 把列表为一个单位添加extend() 把列表中的元素取出一个个添加insert(位置,元素) 指定位置添加(添加的为一个单位) li1=["one","two",'a','b'] li2=['lucky','boy'] li1.append(li2) print(li1) #['one', 'two', 'a', 'b', ['lucky', 'boy']] li1.extend(li2) #['one', 'two', 'a', 'b', 'lucky', 'boy'] li1.insert(1,li2) #['one', ['lucky', 'boy'], 'two', 'a', 'b'] li1.extend(li2) li1[2:5]=["aa",'bb','cc'] #['one', 'two', 'aa', 'bb', 'cc', 'boy']

删:

pop()

如果不指定索引,默认删除最后一个可删除指定索引对应的元素 li1=["one","two",'a','b'] li1.pop() li1.pop(1) print(li1) #['one', 'a']

remove()

删除第一个遇到的指定元素无指定元素会报错 li1=["one","two",'a','b','a'] li1.remove('a') print(li1) #['one', 'two', 'b', 'a']

del

删除指定位置元素 li1=["one","two",'a','b','a'] del li1[2] print(li1) #['one', 'two', 'b', 'a']

clear()

清空 li1=["one","two",'a','b','a'] li1.clear() print(li1) #[]

索引(1.5)切片

1.7遍历

元素遍历 li1=["one","two",'a','b','a'] for i in li1: print(i,end=' ') #one two a b a 索引遍历 li1=["one","two",'a','b','a'] for i in range(len(li1)): print(li1[i], end=" ") #one two a b a 枚举遍历 enumerate(list,起始值) 同时获得索引值和元素 li1=["one","two",'a','b','a'] for i in enumerate(li1,2): print(i, end=" ") #(2, 'one') (3, 'two') (4, 'a') (5, 'b') (6, 'a') li1=["one","two",'a','b','a'] for a,b in enumerate(li1[:2],2): print(a,b) #2 one 3 two

1.8补充函数

堆和栈用列表可实现计数count()反转reverse() li1=["one","two",'a','b','a'] li1.reverse() print(li1) #['a', 'b', 'a', 'two', 'one'] 排序sort() li1.sort() #['a', 'a', 'b', 'one', 'two'] li1.sort(reverse=True) #['two', 'one', 'b', 'a', 'a']

例:两个列表交集

li1=["a","b",'c','d','e','e','d'] li2=['c','d','e','f','g'] li3=[] def se(sr): for i in li3: if(i==sr): return False return True for i in li1: for j in li2: if i==j and se(i): li3.append(i) print(li3)

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

li1=[] while True: str=input("请输入元素:") if str=='q' : break li1.append(str) print(li1)

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

import random li=[] li1=[0]*11 for i in range(0,30): a=random.randint(0, 10) li1[a]+=1 for i in range(11): li.append([i,li1[i]]) print (li)

1.9拷贝

a=[1,2,3] b=a print(a,b) a[1]=5 print(a,b) [1, 2, 3] [1, 2, 3] [1, 5, 3] [1, 5, 3] 深浅拷贝的三种方法: 切片[ : ]list(li)copy函数 la=[1,2,3,4,[1,2],6] lb=la lb2=la[:] la[4][1]='a' la[0]='a' print(la,lb2) #20399568 20400728 #['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6] import copy la=[1,2,3,4,[1,2],6] lb3=la.copy() print(id(la),id(lb3)) la[4][1]='a' la[0]='a' print(la,lb3) #61426264 62341728 ['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6] la=[1,2,3,4,[1,2],6] lb4=list(la) la[4][1]='a' la[0]='a' print(id(la),id(lb4)) print(la,lb4) #5261912 46612888 ['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6] #深拷贝!!!!!!! import copy la=[1,2,3,4,[1,2],6] lb5=copy.deepcopy(la) la[4][1]='a' la[0]='a' print(id(la),id(lb5)) print(la,lb5) #50742776 50742016 ['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 2], 6] 对象的引用 浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改应用,让他指向另一个位置;修改嵌套列表的元素,列表地址没发生变化,还是指向同一位置。深拷贝拷贝所有元素,包括多层嵌套元素。因此是开辟了一个新的内存村塾去,和数据源没关系。

1.10迭代

print([x for x in range(10)]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 实现原理 迭代[可迭代对象]中的每一个元素每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新值最后可以计算通过一个列表返回

domo

lis=['one','two','a','b'] lis1=['a','b','c'] #过滤 li=[i for i in lis if i not in lis1] print(li) #['one', 'two'] a=[1,2,3] b=['a','b','c'] print([[i,j] for i in a for j in b]) #[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

最新回复(0)