Python第三天笔记——列表

it2022-05-05  154

列表

#使用方括号[ ]括起来的,每个元素之间用逗号隔开;

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

#数组

特点

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

创建

1、创建空列表

li=[] print(li,type(li)) #输出结果: [] <class 'list'>

2、创建多元素列表

gi=[1,2,3,'abc','def','ghi',["I","love","python"]] print(gi,type(gi)) #输出结果: [1, 2, 3, 'abc', 'def', 'ghi', ['I', 'love', 'python']] <class 'list'>

3、强转

sr="abc" hi=list(sr) print(hi,type(hi)) #输出结果: ['a', 'b', 'c'] <class 'list'>

列表的运算

(1)拼接

li1=["I"] li2=["love","python"] print(li1+li2) #输出结果: ['I', 'love', 'python']

(2)重复

print(li2*3) #输出结果: ['love', 'python', 'love', 'python', 'love', 'python']

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

gi=['cl','WZX','abc','def','ghi','I','love','python'] print(len(gi)) print((gi[0],gi[-2])) print(gi[:5]) print(gi[0:6:2]) print(gi[-1:-8:-2]) print(gi[::-1]) print(gi[6][1]) #输出结果: 8 ('cl', 'love') ['cl', 'WZX', 'abc', 'def', 'ghi'] ['cl', 'abc', 'ghi'] ['python', 'I', 'def', 'WZX'] ['python', 'love', 'I', 'ghi', 'def', 'abc', 'WZX', 'cl'] o

列表的常见操作

(1)增

append() li = ["a", "b"] li.append("hh") print(li) #输出结果: ['a', 'b', 'hh'] sr = "城市学院" li = [] for i in sr: li.append(ord(i)) print(li) #输出结果: [22478, 24066, 23398, 38498] extend() li=["I","know"] li1=["a","b","c"] li.extend(li1) print(li) #输出结果: ['I', 'know', 'a', 'b', 'c'] insert():按照索引添加 li=["I","know"] li1=["a","b","c"] li.insert(1,li1) print(li) #输出结果: ['I', ['a', 'b', 'c'], 'know']

(2)删

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

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

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

li=["a","b","c","d","e"] li.remove(li[2]) print(li) li.remove('e') print(li) #输出结果: ['a', 'b', 'd', 'e'] ['a', 'b', 'd'] del li=["a","b","c","d","e"] del li[3] print(li) #输出结果: ['a', 'b', 'c', 'e'] clear() li.clear() print(li) #输出结果: []

(3)改

li1=["a","b","c"] li=['I', ['a', 'b', 'c'], 'know'] li1[2]="666" print(li1) li[2:]=['x','y','z'] print(li) #输出结果: ['a', 'b', '666'] ['I', ['a', 'b', '666'], 'x', 'y', 'z']

(4)查:与以上的索引,切片相同

列表的遍历

(1)元素遍历

li=["a","b","c","d","e"] for i in li: print(i,end=" ") #输出结果: a b c d e

(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,0): print(i) #输出结果: (0, 'a') (1, 'b') (2, 'c') for index,value in enumerate(li,0): print(index,value) #输出结果: 0 a 1 b 2 c

其他操作

计数:count(),查找元素出现的次数反转:reverse() li=list("abcd") print(li) li.reverse() print(li) #输出结果: ['a', 'b', 'c', 'd'] ['d', 'c', 'b', 'a'] 排序:sort(),按照ASCII码排序 li=["l","c","h","i"] print(li) li.sort() #升序 print(li) li.sort(reverse=True) #降序 print(li) #输出结果: ['l', 'c', 'h', 'i'] ['c', 'h', 'i', 'l'] ['l', 'i', 'h', 'c']

#例题

**输出两个列表的交集**: li=[] li1=["a","b","c","d"] li2=["c","d","e","f"] for i in li1: if i in li2: li.append(i) print(li) #输出结果: ['c', 'd'] **输出两个列表的并集**: li1=["a","b","c","d"] li2=["c","d","e","f"] for i in li2: if i not in li1: li1.append(i) print(li1) #输出结果: ['a', 'b', 'c', 'd', 'e', 'f'] #1.input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。 list1=[] while True: a = input("请添加元素:") if a !="q": list1.append(a) else: break print(list1) #输出结果: 请添加元素:w 请添加元素:e 请添加元素:r 请添加元素:q ['w', 'e', 'r'] #2.随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0, 3], [1, 4], ... , [10, 5]] li=[] rand=[] import random for i in range(30): rand.append((random.randint(0,10))) print(rand,end=" ") print( ) for i in range(0,11): li.append([i,rand.count(i)]) print(li) #输出结果: [9, 5, 3, 7, 5, 6, 2, 5, 4, 7, 7, 0, 3, 6, 3, 9, 0, 3, 4, 5, 1, 3, 6, 1, 1, 0, 6, 0, 10, 3] [[0, 4], [1, 3], [2, 1], [3, 6], [4, 2], [5, 4], [6, 4], [7, 3], [8, 0], [9, 2], [10, 1]]

赋值和深浅拷贝

赋值

赋值是对对象的引用

la=[1,2,3,4,5,'a',['b1','b2']] lb=la 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']] 2336330341128 2336330341128 la[5]='aaa' print(la) print(lb) print(id(la),id(lb)) #输出结果: [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] 2336330341128 2336330341128

深浅拷贝

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

三种实现方法

切片操作[:] la=[1,2,3,4,5,'a',['b1','b2']] lb2=la[:] print(la) print(lb2) print(id(la),id(lb2)) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2178759777032 2178759853064 工厂函数list(li)copy模块的copy函数 import copy lb3=copy.copy(la) print(la) print(lb3) print(id(la),id(lb3)) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2214658824968 2214660383880

#添加原子类型,不会影响lb3的拷贝

la.append('hh') print(la) print(lb3) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'hh'] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] la[6][1]='hh' print(la) print(lb3) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'hh']] [1, 2, 3, 4, 5, 'a', ['b1', 'hh']]

深拷贝

import copy la=[1,2,3,4,5,'a',['b1','b2']] lb=copy.deepcopy(la) print(la,id(la)) print(lb,id(lb)) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1822894830600 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1822894831688 la[6][1]="hh" print(la,id(la)) print(lb,id(lb)) #输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'hh']] 2081509061640 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2081509062728

浅拷贝仅拷贝一层

深拷贝拷贝对象的所有元素,包括多层嵌套的元素

因此是开辟了一个新的内存储存区,和数据源没有关系了

列表解析式

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

print([x for x in range(10) if x%2==0]) #输出结果: [0, 2, 4, 6, 8] sr="城市学院" print([ord(x) for x in sr]) #输出结果: [22478, 24066, 23398, 38498]

格式:

[exp for iter_val in iter]

实现原理:

迭代iter中的每一个元素每迭代一次的结果赋值给对应的iter_val,再通过exp运算得到一个新的值最后所有通过表达式计算的值以一个列表的形式返回 y=12 x=y+1 if y>0 else y-1 print(x) #输出结果: 13

带过滤功能的格式

[exp for iter_val in iter if if_condition]

li=[] for iter_val in iter: if if_condition: li.append(iter_val) print(li)

demo:

name=["Tom","Jack","Lucy"] sub=["Python","Java","C","C++"] li=[] for i in name: for j in sub: li.append([i,j]) print(li) print([[i,j] for i in name for j in sub]) #输出结果(相同): [['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)