Day——06

元组
# 一 定义
t1 = ()
print(t1,type(t1))
# 参数为for可以循坏的对象(可迭代对象)
t2 = tuple('123')
print(t2,type(t2))
t3 = tuple([1,2,3])
print(t3,type(t3))
t4 = tuple((7,8,9))
print(t4,type(t4))

思考:如何定义一个只有一个值的元组
print('Owen',)
print(tuple(['Owen']))

总结:
t = (1,2,3) # 多个元组
t = (1 ,) # 单个元组 加逗号

常用操作
元组有序存储
索引取值
t = (1,2,3)
print(t[1])
print(t[-1])
切片
new_t = t[:-1: ]
print(new_t,id(new_t ))
长度(item元素个数)
print(len(t))
元组内置方法
t = (1,2,4,2,3,2,1)
print(t.count(2)) # 该数据类型集合可以存放相同数据
print(t.index(2,1,6))

案例 1
提前拥有一个老师列表,打算开除,如果是校长亲友团,免开
原始列表为list类型
手动输入是否是亲友团,决定是否能开除
teas = ['Bob','Alex']
friends = input('亲友团[0,1]:')
if friends == '1':
teas = tuple(teas)
异常处理
判断teas对象是否是tuple类型
if not isinstance(teas,tuple): # 老师是否是亲友团,不是就开除
teas.clear()
for t in teas:
print( '在职老师:%s'% t)



案例二 元组中的数据一定不能改变吗:一定不能改变,元组中的数据(可变类型)的数据可以改变
t1 = (1,2,'abc',True,(1,2)) #t1永远无法改变
t2 = (1,2,[])
print(t2,type(t2),id(t2[2]))
t2[2].extend((10,20))
print(t2,type(t2),id(t2[2]))


字典: 字典是python中仅存的mapping类型
声明:
dict的key:可以为所有不可变类型:int float tuple str bool None,一般就采用字符串
dict的value:可以为所有数据类型
注:key具有唯一性(重复会覆盖旧值),value可以重复
dic = {1:None,None:None,3.14:None,
True:None,'abc':None,(1,):None,
None:12345
}
print(dic)
#1
d1 = {'name':'Owen','age':18}
print(d1)
#2
d2 = dict({'name':'Owen','age':18})
print(d2)
d3 = dict(name='Egon',age=58)
print(d3)

字典无需存储数据,无索引与切片,用key来取值
增删改查
dic = {}
# 增:key不存在
dic['name'] = 'Mac'
print(dic)
#改:key已存在
dic['name'] = 'Big Mac'
print(dic)
# 查
print(dic['name'])
# 删
del dic['name']
print(dic)

三,get取值
dic = {'a':10,'b':20}
print(dic['a'])
res = dic.get('c') #拥有默认值,None,可以避免错误
print(res)
res = dic.get('d','key不存在') #可以自定义默认值 ******
print(res)

# 增
dic.update({'a':100,'c':300}) # 添加的参数字典,与dic可以重复,有的覆盖,没有的添加
print(dic)
# 删
res = dic.pop('c') #根据key删除指定对象,并返回删除的对象的value
print(res)

随机删除,返回值是key(key,value)
print(dic)
print(dic.popitem())
print(dic.popitem())
print(dic)

# 如何定义一个空字典
#第一个参数:keys:list|tuple|str,第二个参数。统一的默认value
d10 = {}.fromkeys(['a','b','c'],'')
print(d10)

独自设置默认值
d11 = {'a':10,'teas':['Owen']}
d11 = {'a':10}
# 添加老师
if 'teas' not in d11:
d11['teas'] = []
d11['teas'].append('Egon')
d11['teas'].append('LinXX')
print(d11)

set 集合
定义与声明
什么是set:
1 单列数据集合:str,list,tuple,set 双列:dict
2 无须存储:无key无index,无法取值
3 可变数据类型,内部可以存放任意类数据,但数据具有唯一性 *****
声明
{} 代表空字典,用set来创建空集合
s1 = set()
print(s1,type(s1))
s2 = set('abc')
print(s2,type(s2))
内置方法与使用-集合间的运算 & | ^ - > < ==
p_set = {'a','b','c','egon'}
l_set = {'x','y','z','egon'}
print(p_set)
print(l_set)

交集 &
res = (p_set & l_set)
print(res)
并集 | 去重
res = (p_set | l_set)
print(res)
差集 ^ 左减右
res = (p_set - l_set)
print(res)
res = (l_set - p_set)
print(res)
对称差集 ^
res = (p_set ^ l_set)
print(res)

print(p_set)
print(l_set)
# p_set.difference_update(l_set) # 将运算结果赋值给调用者
# 上等于下
p_set = p_set - l_set
print(p_set)
print(l_set)


添加或删除操作
s = set()
s.add('abc')
s.add('xyz')
print(s)
res = s.pop() # 随机删除一个元素
print(res)
# if 'xyz' in s:
# s.remove('xyz') # 有ele删除,无ele抛异常

选课
class_map = [
('owen','python'),
('egon','linue'),
('egon','python'),
('liuxx','python'),
('liuxx','java'),
]
需求:
1.多少人参加了选课:['owen','egon','liuxx']
2.都选了那些课程:['python','linue','java']
利用逻辑代码去重
names = []
for name,_ in class_map:
# 判断列表中是否已存在,不存在才添加
if name not in names:
names.append(name)
print(names)
利用set去重 一pp般不用 记住上面的逻辑代码去重
classes = set()
for _,cless in class_map:
classes.add(cless)
classes = list(classes)
print(classes)
上一篇:GOGOUP-13. tag和json


下一篇:2018 Benelux Algorithm Programming Contest 解题报告