- 用[]括起来
- 元素可以为任意数据类型
创建空列表
li=[]
创建多元素列表
li = [1, 2, 3, "abcd", "city", "college", ["i", "love", "python"]]
print(li, type(li))
'''
[1, 2, 3, 'abcd', 'city', 'college', ['i', 'love', 'python']] <class 'list'>
'''
强转
sr = "abcd"
li = list(sr)
print(li, type(li))
'''
['a', 'b', 'c', 'd'] <class 'list'>
'''
常见的操作
(1)拼接
li1=["I"]
li2=["love","python"]
print(li1+li2)
'''
['I', 'love', 'python']
'''
(2)重复
li2=["love","python"]
print(li2*3)
'''
['love', 'python', 'love', 'python', 'love', 'python']
'''
(3)索引(偏移)[] ,切片[:],[::]
li = ["C", "i", "t", "y", "City", "College", "Zhejiang", ["city", "college", "zhejiang"]]
print(len(li))
print((li[0], li[-7]))
print(li[:5])
print(li[::-1])
print(li[7][1])
'''
8
('C', 'i')
['C', 'i', 't', 'y', 'City']
[['city', 'college', 'zhejiang'], 'Zhejiang', 'College', 'City', 'y', 't', 'i', 'C']
college
'''
(4)增删改查
增
-
append() 把列表为一个单位添加
li = ["City", "College"] print(id(li)) li1 = ["a", "b", "c"] li.append(li1) print(li, id(li)) sr = "城市学院" li = [] for i in sr: li.append(ord(i)) print(li) ''' 1471082354184 ['City', 'College', ['a', 'b', 'c']] 1471082354184 [22478, 24066, 23398, 38498] '''
-
extend() 把列表中的元素取出一个个添加
li = ["City", "College"] li1 = ["a", "b", "c"] li.extend(li1) print(li) ''' ['City', 'College', 'a', 'b', 'c'] '''
-
insert() 指定位置添加(添加的为一个单位)
li = ["City", "College"] li1 = ["a", "b", "c"] li.insert(1, li1) print(li) ''' ['City', ['a', 'b', 'c'], 'College'] '''
删
-
pop() 可删除指定索引对应的元素,如果不指定则默认深处最后一个元素
li = ["a", "b", "c", "d", "e"] print(li.pop(2)) print(li) ''' c ['a', 'b', 'd', 'e'] '''
-
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'] '''
li = ["a", "b", "c", "d", "e", "city", "e"] del li print(li) ''' NameError: name 'li' is not defined '''
-
clear
li = ["a", "b", "c", "d", "e", "city", "e"] li.clear() print(li) ''' [] '''
查
-
索引
-
切片
(5)遍历
- 元素遍历
li=["a","b","c"]
for i in li:
print(i)
'''
a
b
c
'''
- 索引遍历
li=["a","b","c"]
for i in range(len(li)):
print(li[i])
'''
a
b
c
'''
- 枚举遍历enumerate
li=["a","b","c"]
for i in enumerate(li, 15): #也可以不指定开始的数字
print(i)
'''
(15, 'a')
(16, 'b')
(17, 'c')
'''
li=["a","b","c"]
for index,value in enumerate(li[:2],2):
print(index,value)
'''
2 a
3 b
'''
(6)其他操作
- 计数,count()
- 反转,reverse()
li = list("abcd")
print(li)
li.reverse()
print(li)
'''
['a', 'b', 'c', 'd']
['d', 'c', 'b', 'a']
'''
- 排序sort()
li1 = ["a", "c", "d", "ba"]
li1.sort()
print(li1)
'''
['a', 'ba', 'c', 'd']
'''
li1 = ["a", "c", "d", "ba"]
li1.sort(reverse=True)
print(li1)
'''
['d', 'c', 'ba', 'a']
'''
赋值与深浅拷贝
- 赋值
la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
lb = la
print(la)
print(lb)
print(id(la), id(lb))
la[5] = "aaa"
print(la)
print(lb)
'''
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
2768502805960 2768502805960
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
'''
- 浅拷贝
会创建新的对象,内容是原对象的引用
三种实现方式:
-
-
切片操作[:]
la=[1,2,3,4,5,"a",["b1","b2"]] lb = la lb2 = la[:] print(id(la), id(lb2)) ''' 1869841716680 1869839894216 '''
-
工厂函数list(li)
-
copy模块内的copy函数
#外层添加,lb不会跟着改变 import copy la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]] lb_copy = copy.copy(la) print(id(la), id(lb_copy)) #id不同 la.append("test") # 添加原子类型,不会影响lb_copy print(la) print(lb_copy) ''' 2321739306376 2321739308680 [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test'] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] '''
#外层修改,lb不会跟着改变 import copy la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]] lb_copy = copy.copy(la) la[5] = "aaa" print(la) print(lb_copy) ''' [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] '''
#内层修改,lb会随之改变 import copy la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]] lb_copy = copy.copy(la) la[6][0] = "bbb" print(la) print(lb_copy) ''' [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']] [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']] '''
-
-
深拷贝
import copy la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]] lb_deepcopy = copy.deepcopy(la) print(la, id(la)) #id不同 print(lb_deepcopy, id(lb_deepcopy)) la[5] = "aaa" #修改外层,lb不跟着改变 print(la) print(lb_deepcopy) ''' [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1597438907784 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1597438910216 [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] '''
#修改内层,lb也不会随之改变 import copy la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]] lb_deepcopy = copy.deepcopy(la) ''' [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] ‘’‘
浅拷贝相当于我们只拷贝了一层,修改外层元素会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置
深拷贝拷贝对象的所有元素,包括多层嵌套的元素,因此,是开辟了一个新的内存储存区,和数据源没有关系了
(7)列表解析式
li = []
for x in range(10):
li.append(x)
print(li)
print([x for x in range(10) if x % 2 == 0])
'''
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
'''
(8)列表生成式
用来生成列表的特定的语法形式
sr = "城市学院"
print([ord(x) for x in sr])
'''
[22478, 24066, 23398, 38498]
'''
格式:[表达式 for 迭代元素 in 可迭代对象]
实现原理:
- 迭代[可迭代对象]中的每一个元素
- 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
- 最后所有通过表达式计算的值以一个列表的形式返回
y = 10
x = y + 1 if y > 10 else y - 1
print(x)
'''
9
'''
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', '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++']]
'''