列表
#使用方括号[ ]括起来的,每个元素之间用逗号隔开;
#可以储存不同的数据类型。
#数组
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++']]