append 插入一个内容,在末尾追加
a = [i for i in range(1,4)]
a.append(88)
print(a)
[1, 2, 3, 88]
insert 指定位置插入
a = [i for i in range(1,4)]
print(a)
a.insert(2,15)# insert(index,data)
print(a)
[1, 2, 3]
[1, 2, 15, 3]
del 删除
pop 把最后一个元素取出来
print(a)
last_else = a.pop()
print(last_else)
print(a)
[1, 2, 15]
15
[1, 2]
remove 在列表中删除指定的元素
a = [i for i in range(1,6)]
print(a)
print(id(a))
a.remove(5)# 如果删除的值没在list里面,则报错
print(a)
print(id(a))
[1, 2, 3, 4, 5]
1665801729800
[1, 2, 3, 4]
1665801729800
clear 清空
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
[]
1665801729800
[]
1665801729800
reverse 翻转列表内容,原地翻转
a = [1,2,3,4,5]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
[1, 2, 3, 4, 5]
1665802626888
[5, 4, 3, 2, 1]
1665802626888
extend 扩展列表,两个列表,把一个直接拼接到另一个列表
a = [1,2,3,4,5]
b = [6,7,8,9]
print(a)
print(id(a))
a.extend(b)# 这个括号里是扩展的列表
print(a)
print(id(a))
[1, 2, 3, 4, 5]
1665803092232
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1665803092232
count 查找列表中指定值或元素的个数
a = [1,2,3,4,5]
a.append(2)
a.insert(2,2)
print(a)
print(a.count(2))
[1, 2, 2, 3, 4, 5, 2]
3
copy 拷贝,浅拷贝
列表类型变量赋值案例
a = [1,2,3,5,6,8]
print(a)
list类型,简单赋值操作,是传地址,即id相同
b = a
b[3] = 88
print(a)
print(id(a))
print(b)
print(id(b))
print("*"*20)
为了解决以上问题,需要使用copy函数
b = a.copy()
print(a)
print(id(a))
print(b)
print(id(b))
print("*"*30)
b[3] = 77
print(a)
print(id(a))
print(b)
print(id(b))
[1, 2, 3, 5, 6, 8]
[1, 2, 3, 88, 6, 8]
1665803028616
[1, 2, 3, 88, 6, 8]
1665803028616
[1, 2, 3, 88, 6, 8]
1665803028616
[1, 2, 3, 88, 6, 8]
1665801704840
[1, 2, 3, 88, 6, 8]
1665803028616
[1, 2, 3, 77, 6, 8]
1665801704840
深拷贝与浅拷贝的区别
出现下面结果的原因是由于copy只是浅拷贝,只拷贝一层内容
a = [1,2,3,[50,60,70]]# 里面的列表相当于一个元素占位
b = a.copy()
print(id(a))
print(id(b))
print("*“30)
print(id(a[3]))
print(id(b[3]))
print("”*30)
a[3][2] = 666
print(a)
print(b)
1665803236296
1665803238152
1665801704968
1665801704968
[1, 2, 3, [50, 60, 666]]
[1, 2, 3, [50, 60, 666]]
tuple 元组
创建一个空元组
元组的特性,1、有序,2、可以访问,不可以修改,3、list所有特性,除了可修改外,元组都具有,比如说索引,
t = ()
print(type(t))
t = (1,)#这里有逗号表示一个元组,如果没有逗号就表示一个整数
print(type(t))
print(t)
print("*“30)
t = 1,
print(type(t))
print(t)
print("”*30)
创建含多个值的元组
t = 1,2,3,4,4#这里可以用括号,也可以不用
print(type(t))
print(t)
print("*"*30)
使用其他结构创建
l = [1,2,3,4,5]
t = tuple(l)
print(type(t))
print(t)
<class ‘tuple’>
<class ‘tuple’>
(1,)
<class ‘tuple’>
(1,)
<class ‘tuple’>
(1, 2, 3, 4, 4)
<class ‘tuple’>
(1, 2, 3, 4, 5)
索引操作
t = (1,2,3,5,6)
print(t[3])
超标错误
print(t[6])
5
IndexError Traceback (most recent call last)
in
3 print(t[3])
4 # 超标错误
----> 5 print(t[6])
IndexError: tuple index out of range
切片
t = (1,2,3,4,5,6)
t1 = t[1::2]# 表示从2 开始间隔两个,切片可以超标
print(id(t))
print(id(t1))
print(t1)
1665803048808
1665802604120
(2, 4, 6)
序列相加
a = (1,2,3)
b = (2,3,4)
传址操作
print(a)
print(id(a))
a = a + b
print(a)
print(id(a))
注意tuple的不可更改指的是内容不可更改,修改tuple内容会导致报错
a[2] = 6
print(a)
(1, 2, 3)
1665801305760
(1, 2, 3, 2, 3, 4)
1665801436232
TypeError Traceback (most recent call last)
in
9 print(id(a))
10 # 注意tuple的不可更改指的是内容不可更改,修改tuple内容会导致报错
—> 11 a[2] = 6
12 print(a)
TypeError: ‘tuple’ object does not support item assignment
元组相乘
t = (1,2,3)
t = t*3
print(t)
(1, 2, 3, 1, 2, 3, 1, 2, 3)
成员检测
t = (1,2,3)
if 2 in t:
print(“yes”)
else:
print(“no”)
yes
# 元组遍历
1、单层元组遍历
t = (1,3,4,“xixi”)
for i in t:
print(i)
print("*"*30)
t = (1,3,4,“xixi”)
for i in t:
print(i,end=" ")
1
3
4
xixi
1 3 4 xixi
2、双层元组遍历
t = ((1,2,3),(“xi”,“xi”,“xi”),(“wei”,“feng”,“a”))
for i in t:
print(i)
print("*“30)
for k,v,n in t:
print(k,"—",v,"—",n)
print("”*30)
for k,v,n in t:
print(k,"—",v,"—",n,end=" ")
(1, 2, 3)
(‘xi’, ‘xi’, ‘xi’)
(‘wei’, ‘feng’, ‘a’)
1 — 2 — 3
xi — xi — xi
wei — feng — a
1 — 2 — 3 xi — xi — xi wei — feng — a
index求指定元素的索引位置
t = (1,2,3,5,5,6)
print(t.index(3))
print(t.index(5))# 有多个相同值时,以第一个为准
2
3
set 集合
t = set()
print(type(t))
print(t)
print("*"*30)
此时大括号里一定要有值,否则定义的是一个dict
t = {1,2,3,4,5,7}
print(type(t))
print(t)
print("*"*30)
如果只是用大括号定义,则定义的是一个dict
t = {}
print(type(t))
print(t)
<class ‘set’>
set()
<class ‘set’>
{1, 2, 3, 4, 5, 7}
<class ‘dict’>
{}
集合的特征,集合内数据无序,既无法使用索引和分片
集合内数据元素具有唯一性,可以用来排除重复数据
成员检测 in ,not in
s = (2,23,5,6,“future”,‘xixi’)
print(s)
if ‘xixi’ in s:# 注意这里的xixi要用引号引起来
print(“再见啦”)
if ‘jingjing’ not in s:
print(“好久不见啊”)
(2, 23, 5, 6, ‘future’, ‘xixi’)
再见啦
好久不见啊
集合遍历操作
for 循环
s = {1,2,3}
for i in s:
print(i,end=" “)
1 2 3
# 带有元组的集合遍历
s = {(1,2,3),(“i”,“love”,“jingjing”)}
for k,v,n in s:
print(k,”- - -",v,"- - -",n)
for k in s:
print(k)
i - - - love - - - jingjing
1 - - - 2 - - - 3
(‘i’, ‘love’, ‘jingjing’)
(1, 2, 3)
普通集合内涵
以下结合可以自动过滤重复元素
s = {2,2,2,8,8,89,68,89,9889,8,1,5}
print(s)
ss = {i for i in s}
print(ss)
sss = {i for i in s if i % 2 == 0}# 只取偶数
print(sss)
{9889, 2, 1, 68, 5, 8, 89}
{9889, 2, 1, 68, 5, 8, 89}
{8, 2, 68}
创建一个空字典
d = {}
print(type(d))
print(d)
创建一个有值的字典
d = {“one”:1,“two”:2,“three”:3}
print(d)
<class ‘dict’>
{}
{‘one’: 1, ‘two’: 2, ‘three’: 3}
字典常见操作
访问数据
d = {“one”:1,“two”:2,“three”:3}
print(d[“one”]) # 注意这里的中括号是键值
d[“one”] = “eith”
print(d)
1
{‘one’: ‘eith’, ‘two’: 2, ‘three’: 3}
成员检测 in , not in
成员检测的是key内容
d = {“one”:1,“two”:2,“three”:3}
if “one” in d:
print(“key”)
if 1 in d:
print(“value”)
if (“one”,1) in d:
print(k,v)
key
遍历
d = {“one”:1,“two”:2,“three”:3}
for i in d.keys():# 这是访问的键值
print(i,d[i])
for i in d.values():# 这是访问的数值
print(i)
for k,v in d.items():# 这里的写法是与集合等不同的地方
print(k,"- - ",v)
one 1
two 2
three 3
1
2
3
one - - 1
two - - 2
three - - 3
常规字典生成式
d = {“one”:1,“two”:2,“three”:3}
dd = {k:v for k,v in d.items()}# 注意这里items()以及k:v
print(dd)
加限制条件的字典生成式
d = {“one”:1,“two”:2,“three”:3}
dd = {k:v for k,v in d.items() if v % 2 == 0}
print(dd)
{‘one’: 1, ‘two’: 2, ‘three’: 3}
{‘two’: 2}