(三)列表
-
列表是用方括号括起来的[ ],每个元素以逗号分隔;
-
可以储存不同的数据类型数据
-
特点
- 是一个有序的
- 可以重复的
- 可变类型
3.1创建
- 创建空列表:li = [ ]
- 创建多元素列表: li =[1,2,3,“abcd”,“city”,[“i”,“love”,“you”]]
- 强转: sr = “abcd” li = list(sr)
3.2拼接
li1 = ["I"]
li2 = ["love"]
print(li1+li2)
3.3重复
li1 = ["I"]
print(li1*3)
3.4索引(偏移) [ ],切片[:],[: :]
li = ["C","i","t","y",["collage",1,2]]
print(len(li))
print((li[0],li[-2])) #- 从右往左数第几个
print(li[:4])
print(li[4][0])
3.5列表的常见操作
(1)增
- apppend( ) #整体插进去
li = ["city","College"]
li1 = ["a","b","c"]
li.append(li1)
print(li)
- extend( ) #先取出来再插进去
li = ["city","College"]
li1 = ["a","b","c"]
li.extend(li1)
print(li)
- insert( ) #按照索引添加
li = ["city","College"]
li1 = ["a","b","c"]
li.insert(1,li1)
print(li)
(2)改
li = ["city","College",1,2,3]
li[0] = 666
li[2:6] = ["x","y","z"]
print(li)
(3)删除
- pop(),返回被删除的元素
- 如果不指定索引,默认删除最后一个元素
- 删除指定索引的对应元素
li = ["city","College",1,2,3]
print(li.pop(2))
print(li)
- remove(),移除第一次遇到的指定元素
li = ["city","College",1,2,3,2]
print(li.remove(2))
print(li)
- del
li = ["city","College",1,2,3,2]
del li[4]
print(li)
clear() 全部清空
li = ["city","College",1,2,3,2]
li.clear()
print(li)
(4)查(遍历)
-
遍历
- 元素遍历
li = ["a","b","c","d"]
for i in li:
print(i)
- 索引遍历
li = ["a","b","c","d"]
for i in range(len(li)):
print(li[i])
- 枚举遍历:
enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等)
li = ["a","b","c","d"]
for i in enumerate(li,2):
print(i)
enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值
li = ["a","b","c","d"]
for index,value in enumerate(li[:2],2):
print(index,value)
堆和栈,用列表实现
- 计数,count( ),查找元素出现的次数
- 反转,reverse( )
- 排序,sort( ), 按照ASCII码值排序
li = list("abcd")
print(li)
li.reverse()
print(li)
li.sort()
print(li)
li.sort(reverse=True)
print(li)
练习
交集:
li1 = ["a","b","c","e"]
li2 = ["a","c","f","g"]
li3 = []
for i in range(len(li1)):
for j in range(len(li2)):
if li2[j]==li1[i]:
li3.append(li2[j])
print(li3)
input()函数实现往空列表中添加元素,"q"的时候,结束输入,并返回列表。
li = []
while True:
inp = input("请输入列表元素:\t")
if inp == "q":
break
else:
li.append(inp)
print(li)
随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0,3],[1,4],…[10,5]]
import random
ran_int = []
result_li = []
for i in range(30):
ran_int.append(random.randint(0,10))
for i in range(11):
result_li.append([i,ran_int.count(i)])
print(result_li)
(5)赋值与深浅拷贝
-
赋值是对对象的引用
la = [1,2,3,4,5,"a",["b1","b2"]] lb = la print(la) print(lb) print(la is lb) la[5] = "666" print(la is lb) #指向同一区域还是相同
-
深浅拷贝
-
浅拷贝会创建新对象,内容是原对象的引用(copy后最外层不会变,里层还是会一起变动)
三种方法实现
- 切片操作[:]
- 工厂函数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) la[5] = ["aaa"] print(la,lb_deepcopy) la[6][0]="aaaaa" print(la,lb_deepcopy)
-
对象引用
- 浅拷贝:相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。
- 深拷贝:拷贝对象的所有元素,包括多层嵌套元素。因此,是开辟了一个新的内部存储区,和数据源没有关系了。
(6)列表解析式
li = []
for x in range(10):
li.append(x)
print(li)
print([x for x in range(10) if x%2==0])
(7)列表生成式
用来生成列表的特定语法形式
sr = "城市学院"
print([ord(x) for x in sr])
格式:
[表达式 for 迭代元素 in 可迭代对象 if if条件]
[exp for iter_val in iter if if_condtion]
name = ["Tom","Jack","Alice"]
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])
实现原理:
-
迭代[可迭代对象]中的每一个元素
-
每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算中得到一个新的值
-
最后所有通过表达式计算的值以一个列表的形式返回。
(四)元组
- 有序
- 可重复
- 不可更改(地址不可更改,内容可以变)
符号使用():
- 定义:
4.1元组的创建
-
空元组的创建,不能添加元素
-
单元素元组的创建,需要在单元素后面加个“,”
li = [] tp = () print(type(tp)) tp = ("abc") print(type(tp)) tp = ("abc",) print(type(tp))
-
多元素元组的创建,包含多种数据类型
4.2拼接
tp = ("abc")
tp1 = ("def")
tp2 = tp+tp1
print(tp2)
4.3重复
tp1 = ("def")
print(tp1*3)
4.4索引(偏移) 切片
tp = ("def",666,[1,2,3])
print(tp[0],tp[-2])
print(tp[2][0])
print(tp[:2])
4.5查
-
索引查
-
切片查
-
index( )
tp = ("def",666,"a","b","c",[1,2,3]) print(tp.index("a"))
-
增 不能操作
-
删 不能;但是可以全部删除 del tp(地址还是不变)
-
改 第一层不能操作
4.6最大值、最小值
tp = ("def","a","b","c")
print(max(tp),min(tp))
4.7 遍历
- 元素遍历
tp = ("def","a","b","c")
for i in tp:
print(i)
```
- 索引遍历
```python
tp = ("def","a","b","c")
for i in range(len(tp)):
print(tp[i])
-
枚举enumerate
- enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等)
tp = ("def","a","b","c") for i in enumerate(tp,2): print(i)
- enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值
tp = ("def","a","b","c")
for index,value in enumerate(tp[:2],2):
print(index,value)