9.16总结

元组

1.定义:只可取,不可更改的列表,()内用逗号隔开多个元素(可以为任意数据类型)

#lt=list([1,2,3])
tup=tuple((1,2,3))
print(tup,type(tup))
运行结果:
(1, 2, 3) <class 'tuple'>

2.作用:元组一创建就被写死了

如果元组只有一个元素,必须得加逗号

tup1=(1,)
print(tup1,type(tup1))
运行结果:
(1,) <class 'tuple'>

3.使用方法:

索引取值

print(tup[0])  #1

索引切片

print(tup[0:3])   #(1,2,3)

for循环

for i in tup:
    print(i)  #1 2 3

成员运算

print(0 in tup)  #false

len长度

print(len(tup))  #3

index获取元素索引

print(tup.index(1))  #0

计数

print(tup.count(2)) #1

有序or无序:有序

可变or不可变:不可变

字典

*字符串/列表/字典--》常用,他们三个就足够描述世间万物了

其他数据类型可以被替代--》列表替代元组,redis数据库替代集合

1.字典作用:存储多个数据,对每个数据具有描述

2.定义方式:{}内用逗号隔开多个键key(具有描述意义,不能为可变数据类型):值value(任意数据类型)对#散列表(哈希表)

3.使用方法:

按key取值/按key修改值

dic={'a':1,'b':2,'c':3}
print(dic['a'])  #1
dic['b']=4
print(dic) #{'a': 1, 'b': 4, 'c': 3}

添加值,没有就添加,有就修改

dic['d']=4
print(dic) #{'a': 1, 'b': 4, 'c': 3, 'd': 4}

for 循环 (只循环key)

for i in dic:
    print(i)   #只循环key

成员运算

print('a' in dic)  #True

len 长度

print(len(dic)) #4

del/pop/popitem 删除

del dic['a']
print(f'dic.get('a'):{dic.get('a')}')   
运行结果:
dic.get('a'):None
    
dic.pop('a')
print(f"dic.pop('b'): {dic.pop('b')}")
print(f"dic.get('a'): {dic.get('a')}")
运行结果:
dic.pop('b'): 1
dic.get('a'): None
    
print(f"dic.popitem():{dic.popitem()}") #popitem()随机返回并删除字典中的一对键和值(一般删除末尾对)
运行结果:
dic.popitem():('j', 2)

keys/values/items 键/值/对

print(dic.keys())  #看成列表
print(dic.values())
print(dic.items())
for i in dic.items():
    print(i)   #循环键值对

get 获取 ,字典中没有返回None,可以给定一个默认值

print(dic.get('b',1))  #4
#print(dic.get('b')  #打印结果一样

update 更新 相当于list里的extend扩展

dic1={'a':1,'c':2}
dic2={'b':1,'d':2}
dic1.update(dic2)
print(dic1)

setdefault 字典有这个key,就不修改,没有则增加

dic.setdefault('j',2)
dic.setdefault('a',2)
print(dic)

有序or 无序:无序

可变or不可变:可变(值变id不变)

集合

交集/并集/补集/差集

1.作用:进行上述运算,去重,乱序--》基于散列表实现的

2.定义方式:{}内以逗号隔开多个元素(不能为可变数据类型)

s={}  #空字典
print(type(s)) 
s=set()  #空集合
print(type(s)) 
运行结果:
<class 'dict'>
<class 'set'>
s = {'a', 'a', 'a', 'a', 1, 'v', 2, 2, 'c', 3, 3, 4, 5, 6}  # 对于数字而言,不会乱序;但是对于其他,就乱序
print(s) 
运行结果:
{1, 2, 3, 4, 5, 6, 'v', 'c', 'a'}

3.使用方法:

s1={'jason','nick','tank','sean'}
s2={'nick','egon','kevin'}
#并集
print(s1|s2) 
#交集
print(s1&s2)
#差集
print(s1-s2) #前面的减去两者重合的
#补集
print(s1^s2)  #除了交集剩下的
#add
s1.add('ocean')
print(s1)

删除值 remove/discard/pop

s1.remove('cases') #没有此值就报错
print(s1)
s1.discard('cases') #没有此值不报错
print(s1)
s1.pop() #随意删除一个值
print(s1)

有序or 无序:无序

可变or不可变:可变(值变id不变)

深浅拷贝

可变:值变id不变

不可变:值变id变

1.拷贝(赋值)

当y为x的拷贝对象,如果x为不可变类型,x变化y不变,如果x为可变类型,则x和y都变化

x=10
y=x
x+=1
print(y)  #10

x=[1,2,3]
y=x
x+=[4]
print(y)  #[1, 2, 3, 4]

2.浅拷贝

如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.copy(l1)

l1.append('g')

print(l1)
print(l2)
l1[3].append('g')

print(l1)
print(l2)
运行结果:字符串不可变,列表可变
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
['a', 'b', 'c', ['d', 'e', 'f', 'g']]

3.深拷贝

当lt2是lt1的深拷贝对象时,lt1内部的不可变类型变化,lt2不变;lt1内部的可变类型变化,lt2不变

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)

l1.append('g')

print(l1)
print(l2)
l1[3].append('g')

print(l1)
print(l2)
运行结果:
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]
上一篇:HDU-1260.Tickets(简单线性DP)


下一篇:Python中元组的基本用法