您的位置:首页 > 编程语言 > Python开发

006 python 元组tuple 字典dict 集合set

2019-03-25 21:33 309 查看

元组 tuple

#元组的学习

# 基本使用
# 作用:存多个值
# 定义:使用 () 定义,括号内的元素用逗号隔开 ,也可以使用括号来定义,不推荐

# tup1 = (1,2,3,4,5,6)
# print(type(tup1))
# tup2 = (1,2,3,'1','2','3')
# print(type(tup2))
# tup3 = '1','2','3',1,2,3
# print(type(tup3))
# tup4 = "1","2","class"
# print(type(tup4))
# tup5 = 1,2,3,4,5
# print(type(tup5))
# tup6 = [1,2,3],[4,5,6],[7,8,9]
# print(type(tup6))
# tup7 = ('class',(1,2,3,4),'clas',('1',1,'2'))
# print(type(tup7))

# 如果只有一个元素 要使用逗号分隔
# tup8 = (1)
# print(type(tup8)) # 输出int类型
# tup9 = (1,)
# print(type(tup9)) # 输入tuple类型

# 取值

# 1.索引取值
# 正向取
# print(tup1[0])
# print(tup1[3])
# print(tup4[2])
# print(tup6[2])

# 反向取
# print(tup1[-1])
# print(tup4[-2])
# print(tup7[-3])

# 2.切片取 顾头不顾尾步长默认1
# print(tup1[1:])
# print(tup7[::-1])
# print(tup4[:2])
# print(tup2[:4:2])

# 3.元组的更新 元组属于不可变的类型,无法直接增/删/改

# 改-重新赋值一个元祖给它
# print(tup1)
# tup1 = ('t1',2)
# print(type(tup1))
# print(tup1)

# 删-只能用del()函数 但是它会直接删除定义的元组,程序运行会报错
# print(tup2)
# del(tup2)
# print(tup2)

# 增-使用+号来合并两个元祖
# print(tup1+tup2)
# print(tup2+tup6)

# len() 取元组内元素的个数
# print(len(tup1))
# print(len(tup4))

'''
运算符
len() 取元组内元素的个数
+ 连接两个元组
* 复制元组
in 元素是否存在
not in 元素是否不存在
for  循环遍历出元素
'''
# *
# tup11 = (1,2,3)
# print(tup11 * 2)

# in   not in
# tup = (1,2,3,4)
# print(1 in tup)
# print(5 in tup)

# print(1 not in tup)
# print(8 not in tup)

# for
# tup = 1,2,3,4,5,6
# for i in tup:
#     print(i)

'''
常用的一些函数
max() 取元素最大值
min() 取元素最小值
tuple() 将列表转换为元组
count() 统计元素出现的次数
index() 查找元素的位置
'''

# tup = 1,2,3,4,5
# print(max(tup))
# print(min(tup))

# tups = '1','2','3','4'
# print(max(tups))
# print(min(tups))

# tupsi = '1','x','3','4'
# print(max(tupsi))
# print(min(tupsi))

# str1 = 'bran'
# list1 = [1,2,3,4,5]
# print(tuple(str1))
# print(tuple(list1))

# dict1 = {'key':1,'key1':3} # 只能将键转出
# print(tuple(dict1))

# tup = 1,2,1,4,5
# print(tup.count(1))

# print(tup.index(4))

# 类型的总结
# 元组和列表的区别
# 相同点:可以存储多个不同类型的值,可迭代对象
# 不同点:1.元组定义使用括号,列表使用方括号 2.元组只能取不能修改,列表可以
# 不可变,有序,存多个值

'''
购物车
'''
# msg_dic={
#     'apple':10,
#     'tesla':100000,
#     'mac':3000,
#     'lenovo':30000,
#     'chicken':10,}
# goods = []
# while True:
#     # 打印商品出来
#     for k,v in msg_dic.items():
#         print('商品:{} 价格:{}'.format(k,v))
#     # 输入商品名
#     choice = input('input shop name').strip()

#     # 判断商品是否存在
#     if choice not in msg_dic:continue

#     # 输入个数
#     count = input('input num >>').strip()

#     # 判断输入的不是整数 直接返回
#     if not count.isdigit():continue

#     goods.append((choice,msg_dic[choice],count))

#     print(goods)

字典 dict

'''
字典的学习
用途:存多个任意类型的值 以键值对来存取值  取值的速度快
定义:使用 {} 括号来定义,多个键值对要用逗号来分割,键是唯一的,不可变的,但值可以是任何类型
增/删/改/查/转
常用的方法
总结:
1.字典的键必须是唯一的,不能重复,如果重复字典只记住最后面的key
2.key是不可变的,所以可以是数字,字符串,元组。列表是不可以的
'''

# 定义
# d = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}

# dict_int = {1:'bran',2:123,(1,2,3):12}
# print(dict_int)

# 查 就是取值 通过key取值
# print(dict1['name'])
# print(dict1['info'])
# print(dict1['age'])

# 改 通过键来修改
# dict1['name'] = 'jace'
# print(dict1['name'])
# dict1['aihao'][0] = 'ppp'
# print(dict1)

# 删 通过key来删除   clear() 清空
# del(dict1['name']) #通过key删除值
# print(dict1)

# dict1.clear()
# print(dict1)

# del(dict1)  # 直接删除字典
# print(dict1)

# 改 update()追加另一个字典数据到尾部
# dict2 = {'xx':12,22:'222'}
# dict1.update(dict2)
# print(dict1)

# dict1.update({'xxx':123,'123':123})
# print(dict1)

# 常用的函数

# len() 返回字典的键值对数量
# print(len(dict1))

# str() 将字典转为字符串类型
# print(type(str(dict1)))

# copy() 复制一份给另一个字典 就是重新创建了一个新的字典
# dict2 = {'name':'bran','age':123}
# dict3 = dict2.copy()
# print(dict3)

# copy() 和 直接赋值的却别
# dict1 =  {'user':'runoob','num':[1,2,3]}
# dict2 = dict1          # 浅拷贝: 引用对象
# dict3 = dict1.copy()   # 深拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

# # 修改 data 数据
# dict1['user']='root'
# dict1['num'].remove(1)

# # 输出结果
# print(dict1)
# print(dict2)
# print(dict3)

'''
直接赋值,浅拷贝,深拷贝
'''
# import copy

# a = [1,2,3,4,['a','b']]

#  直接赋值给b  其实就是把a 的内存地址给了b
# b = a
# print(id(a))
# print(id(b))

# 如果修改了a里面的值,b里面的值也是改变了,因为它们都是指向同一个内存地址
# a.append(5)
# a[-2].append('c')
# print(a)
# print(id(a))
# print(b)
# print(id(b))

# copy() 浅拷贝  只拷贝第一层数据 也就是父对象
# c = a.copy()
# print(a)
# print(c)
# print(id(a))
# print(id(c))

# 修改第一层数据的值,a和c都是互相不想干的
# a.append(5)
# print(a)
# print(c)
# 修改第二层数据的值,a和c的值都是被修改的 ,因为第二层的id地址相等
# a[-1].append('c')
# print(a)
# print(c)
# print(id(a[-1]))
# print(id(c[-1]))

# copy.deelcopy() 深拷贝 复制所有层的数据给一个新的变量
# c = copy.deepcopy(a)
# print(id(a)) # 完全是两个不同的ID地址
# print(id(c))

# 修改a的第一层值  c的值没有改变
# a.append(4)
# print(a)
# print(c)
# 修改a的第二层值 c的第二层值也是没有改变
# a[-1].append('c')
# print(a)
# print(c)
# 第二层值的id都是不一样的所以值没有改变
# print(id(a[-1]))
# print(id(c[-1]))

# fromkeys(seq,[value]) 创建一个新的字典,将序列做参数传进来然后转为key,value的默认值是None,
# seq = 'key1','key2','key3'
# print(dict.fromkeys(seq))
# print(dict.fromkeys(seq,'value'))

# get(key,default=None) 返回指定键的值,如果指定的键没有在字典中则返回默认值None
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}

# print(dict1.get('name'))
# print(dict1.get('name1'))
# print(dict1.get('name1',0))

# in not in 成员运算 判断key是否存在字典中
# print('bran' in dict1)
# print('name' in dict1)
# print('name' not in dict1)
# print('xx' not in dict1)

# items() 以列表返回可遍历的(键值)元组数组
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}
# print(dict1.items())

# keys() 返回一个可迭代的对象,可使用list转列表,⚠️在python2中直接返回列表
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}
# print(dict1.keys())

# setdefault(key,default=None) 和get类似,不过如果键不存在,则添加键到字典值为默认值
# dict1 = {'name': 'bran', 'age': 12, 'aihao': [
#     'code', 'play'], 'info': (19990101, 'man')}
# print(dict1.setdefault('name', 'jane'))
# dict1.setdefault('xx', 'xxx')
# print(dict1)

# update(dict) 将一个字典添加到字典中
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}
# dict2 = {'xx':'pppp'}
# dict1.update(dict2)
# print(dict1)

# values() 返回一个迭代器 可以使用list来转列表
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}
# print(dict1.values())

# pop(key,[default]) 删除字典指定的键所对应的值,返回被删除的字典键值对,key必须给。否则返回default
# dict1 = {'name': 'bran', 'age': 12, 'aihao': [
# 'code', 'play'], 'info': (19990101, 'man')}
# print(dict1.pop('name'))
# print(dict1)
# print(dict1.pop('name','No'))
# print(dict1)

# popitem() 随机返回并删除字典中的一对键值(一般删除末尾部)
# print(dict1)
# print(dict1.popitem())
# print(dict1)

# 循环for
# dict1 = {'name':'bran','age':12,'aihao':['code','play'],'info':(19990101,'man')}
# for d in dict1:
#     print(d)
# print('-'*10)
# for k,v in dict1.items():
#     print(k,v)
# print('-' * 10)
# for k in dict1.keys():
#     print(k)
# print('-' * 10)
# for v in dict1.values():
#     print(v)

# 练习
# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中

# list1 = [11,22,33,44,55,66,77,88,99,]
# dict1 = {'k1':[],'k2':[]}
# for i in list1:
#     if i > 66:
#         dict1['k1'].append(i)
#     else:
#         dict1['k2'].append(i)

# print(dict1)

# 统计s='hello alex alex say hello sb sb'中每个单词的个数
# s = 'hello alex alex say hello sb sb'
# list1 = s.split(' ')/
# dict1 = {}
# for i in list1:
#     if i in dict1:
#         dict1[i] += 1
#     else:
#         dict1[i] = 1
# print(dict1)

# for i in list1:
#     dict1.update({i:list1.count(i)})
#     dict[i] = list1.count(i)
# print(dict1)

# for i in list1:
#     dict1.setdefault(i,list1.count(i))
# print(dict1)

# set1 = set(list1)
# print(type(set1))
# print(set1)
# for i in set1:
#     dict1[i]=list1.count(i)
# print(dict1)

集合 set

'''
集合set 无序的,不重复的元素列表
用途:去重,关系运算
定义:使用set()函数创建,也可以使用{}创建,不过创建空的集合要用set()因为花括号用来创建字典的,自带去重功能
元素遵循的原则:1.每个元素必须是不可变类型 2.没有重复的元素 3.无序
总结:集合的目的不是将不同的值存放在一起,不同的集合间用来做关系运算
'''

# 定义
# set1 = {'1','2','3','5'}
# set2 = set()
# print(type(set1))
# print(type(set2))
# print(set1)
# print(set2)

# 去重
# basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
# print(basket)

# | 合集 合并两个集合,并去重   同函数union()
# set1 = set('abcdefg')
# set2 = set('abcdzxcv')
# print(set1 | set2)
# set1.union(set2)
# print(set.union(set1,set2))

# & 交集 取两个集合内都存在的元素  同函数intersection()
# print(set1 & set2)
# print(set.intersection(set1,set2))

# - 差集 取一个集合有的,而另一个集合内没有的  同函数difference()
# print(set1 - set2) # 取set2内不存在set1的值
# print(set2 - set1) # 取set1内不存在set2的值
# print(set.difference(set1,set2))

# ^ 对称差集 取两个集合内不对称的值
# print(set1 ^ set2)

# == 比较两个集合是否相等
# set3 = set('abc')
# set4 = set('abc')
# print(set1 == set2)
# print(set3 == set4)

# 父集:>,>= 判断小于的每个元素是否存在大于的元素中
# set3 = set('abc')
# set4 = set('abc')
# print(set3 >= set4) # 判断set4中的每个元素是否都在set3中

# 子集:<,<=
# print(set3 <= set4) # 判断set3中的没有元素是否都在set4中

# add() 单个元素的添加
# st = set('abcdefg')
# print(st)
# st.add('dd')
# print(st)

# update() 可添加一个集合 或 多个元素 用逗号隔开
# st.update({2,3,4})
# print(st)
# st.update('1','2')
# print(st)

# remove() 删除元素 如果元素不存在则报错
# st.remove('a')
# print(st)
# discard() 删除元素 如果元素不存在 不报错
# st.discard('aa')
# print(st)
# pop() 随机删除集合内的元素 默认删除排序后的第一个元素
# print(st)
# st.pop()
# print(st)
# clear() 清空元素
# st.clear()
# print(st)

# len() 取集合内元素的个数
# print(len(st))

# in  not in 判断元素是否在集合内
# print('a' in st)
# print('dd' not in st)

# 练习
'''
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
'''
# pythons = {'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
# linuxs = {'wupeiqi','oldboy','gangdan'}

# 1
# print(pythons & linuxs)
# print(set.intersection(pythons,linuxs))

# 2
# print( pythons | linuxs)
# print(set.union(pythons,linuxs))

# 3
# print(pythons - linuxs)

# 4
# print(pythons ^ linuxs)

'''
 二.去重
   1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
   2.在上题的基础上,保存列表原来的顺序
   3.去除文件中重复的行,肯定要保持文件内容的顺序不变
   4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

'''
# 1
# l = ['a','b',1,'a','a']
# print(set(l))

# 2
# l1 = ['a','b',1,'a','a']
# l = []
# for i in l1:
#     if i not in l:
#         l.append(i)
# print(l)

# s = set()
# for i in l1:
#     if i not in s:
#         s.add(i)
#         l.append(i)
# print(l)

# l=[
#     {'name':'egon','age':18,'sex':'male'},
#     {'name':'alex','age':73,'sex':'male'},
#     {'name':'egon','age':20,'sex':'female'},
#     {'name':'egon','age':18,'sex':'male'},
#     {'name':'egon','age':18,'sex':'male'},
# ]
# s = set()
# ll = []
# for item in l:
#     val = (item['name'],item['age'],item['sex'])
#     if val not in s:
#         s.add(val)
#         ll.append(item)
# print(ll)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐