# for 循环的使用
# 常用操作:
# 依赖索引
# while i < len(t):
# print(t[i])
# i += 1
#
# for i in range(len(t)):
# print(t[i])
#
# 不依赖索引
# for item in t:
# print(item)
# 3.enumerate函数 将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中
# seq ---- 一个序列.迭代器或其他支持迭代对象
# star -- 下标起始位置
#
#
# 普通的 for 循环
# >>>i = 0
# >>> seq = ['one', 'two', 'three']
# >>> for element in seq:
# ... print i, seq[i]
# ... i +=1
# ...
# 0 one
# 1 two
# 2 three
#
# for 循环使用 enumerate
# >>>seq = ['one', 'two', 'three']
# >>> for i, element in enumerate(seq):
# ... print i, seq[i]
# ...
# 0 one
# 1 two
# 2 three
#
# **************************************************
#
#
# 元组----"就是不可变的列表"
# 包含在()之内的,以逗号隔开的的多个值---小括号不是必须的,必须的是逗号
# 元祖与列表类似,不同之处在于元组的元素不能修改
# 定义方式 :
# t = tuple((1,2,3,4))
#
#
# 3 常用操作+内置的方法
# 优先掌握的操作:
# tuple = (1,2,3,4,5)
# 1、按索引取值(正向取+反向取):只能取
# tuple(1) # 2
#
# 2、切片(顾头不顾尾,步长)
# tuple[0:2]
#
# 3、长度
# len()
#
# 4、成员运算in和not in
#
# 5、循环
# for item in tuple()
#
# 6.内置方法
# tuple.count()
# 计算元组内每个元素的个数
#
# tuple.index()
# 获取元素的索引
#
# ***************************************************
#
# 字典
# 用途:以key:value的形式存多个值
# 优点:存取都快,每一个值都有对应的key
# 定义方式:{}内以逗号分隔多个元素,格式为key:value
# 其中key必须为不可变类型,value可以是任意类型
#
# 常用操作和内置方法
# 1.按key存取值:可存可取
# 2.长度len
# 3.成员关系运算 in 和 not in :判断的是字典中的key
# 4.删除
# dict.pop() 根据key来删除value,返回被删除的值...注意:必须给出key,
# 如下:没有对应的key,则返回指定的值
# dict1 = {1:22,2:22}
# res = dict1.pop(3,None)
# print(res)
# 5、键keys(),值values(),键值对items()
# dict.keys()----打印所有的key
# dict.values()----打印所有的value
# dict.items()-----打印所有的key:value
# dic={'name':'egon','age':18}
# print(dic.keys())
# print(dic.values())
# print(dic.items())
# 返回结果如下:
# dict_keys(['name', 'age'])
# dict_values(['egon', 18])
# dict_items([('name', 'egon'), ('age', 18)])
# 6.其他操作
# dic={'name':'egon','age':18}
# dic.get('name111') # 有这个key,则返回key对应的value...没有则返回None
# dic.popitem() #随机删除一个key:value,,并返回
# dic.update()#对与老字典来说,更新指的是,新字典中有而老字典中没有则添加,新有而老有,则覆盖
# dic.fromkeys() #遍历一个可迭代序列,创建一个指定value值的字典
# ****** dic.setdefault()
#
# setdefaul的用处:
# 1、字典有中有key,则不修改,返回原key对应的原值
# dic={'name':'egon','age':18}
# res=dic.setdefault('name','EGON')
# print('返回值',res)
# print(dic)
#
# 2、没有对应的key,则添加,返回添加的key对应的value
# dic={'age':18}
# res=dic.setdefault('name','EGON')
# print('返回值',res)
# print(dic) #{'age': 18, 'name': 'EGON'}
#
# ********************************************************、
# 集合
# 定义:在{}内用都好分割开一个个元素
# s=set()
# 注意的问题:集合内没有重复的元素
# 集合的元素必须是不可变类型
# s={1,2,3,4,4,4,4,4,4,4,'a'} #s=set({1,2,3,4,'a'})
# print(id(s),type(s),s)
#
# 用途:
# 1,关系运算(交集,合集,差集,交叉补集)
# 例:
# stus_linux={'alex','egon','张全蛋','李铁蛋','oldboy'}
# stus_python={'李二丫','wxx','liudehua','alex','egon'}
#
# 既报名linux又报名python的学生:交集(两个集合元素相同的部分)
# print(stus_linux & stus_python)
# print(stus_linux.intersection(stus_python))
#
# 所有的学生:并集(两个集合合并为一个集合后去重的部分)
# print(stus_linux | stus_python)
# print(stus_linux.union(stus_python))
#
# 只报名linux,没有报名python的:差集(只在其中一个集合,另一个集合没有的部分)
# print(stus_linux - stus_python)
# print(stus_linux.difference(stus_python))
#
# 没有同时报名两门课程的学生姓名:交叉补集(去掉两个集合交集的部分)
# print(stus_linux ^ stus_python)
# print(stus_linux.symmetric_difference(stus_python))
#
# 2.去重(集合内没有两个重复的元素)
# s1=set('hello')
# print(s1)
#
# l=['a','b',1,'a','a']
# print(list(set(l)))
#
# 想去重还想保证原来的顺序:了解
# l = ['a', 'b', 1, 'a', 'a']
# l_new=[]
# s=set()
#
# for item in l:
# if item not in s:
# s.add(item) #s={'a','b',1}
# l_new.append(item) #l_new=['a','b',1]
#
# 常用操作和内置方法
# 1.循环取值
# s1={1,'a','b','c','d'}
# for item in s1:
# print(item)
#
# 2.长度len()
# len(set())
#
# 3.成员运算 in not in
#
# 4增加
# s1={1,2,3,4}
# s1.add() #每次添加一个元素
# s1.update({1,3,45})#一次可以添加多个值
#
# 5删除
# s2=s1.discard()#当删除的元素不存在是不会报错,不管时候元素存不存在都会返回一个None
# s1.remove()#当删除的元素不存在是不会报错
# s1.pop() #每次随机取走一个元素,有返回值
#
# 父集和子集
# 如果集合s1包含集合s2内的所有元素,那么s1为s2的父集,s2为s1的子集
#
# 总结:
# 存多个值
# 无序
# 可变类型