#!/user/bin/env python
# -*- coding:utf-8 -*-
# 注意 定义字符串的时候如果是括号两边包含有引号,我们要用单引号和双引号分开来写否则因为转义会报错 例如下面的写法
# map1='{"a":"1","a":"1","a":"1", "a":"1"}'
# 1.zip()拉链,它把输入的两个序列参数一一的对应起来,生成可迭代的对象。序列类型有字符 元素 列表。有序的列表。无论是第一个参数多出来还是第二个参数多出来
# 都只按照少的对应起来。
# print(list(zip("abcde","123456")))#两个参数必须都是可迭代的序列参数。
# map1={"name":"ali","age":18,"sex":"男"}
# # print(list(zip(map1.keys(),map1.values())))
# # print(tuple(zip(map1.keys(),map1.values())))
# # print(set(zip(map1.keys(),map1.values())))
# print(list(zip("1234","abc")))
# print(list(zip("12","abc")))#都只按照少的输出。
# 2.max()高级用法,1.参数必须是可迭代对象;2.不同类型的数据不能进行比较。如果是字符串,所有的字符会拿出来一一比较。例
# map1={"ab":18,"ac":20,"de":89,"zs":90}
# print(max(map1.keys()))#如果直接用变量类型比较会用key来作比较,key都是字符类型的所以会按照ASCII大小进行比较,第一次比较Z最大后面
# # 就直接不在进行比较,zs就是最大的
# print(max(map1)) #运行结果同上。
# 一需求取出来数值最大的运行方式如下
# print(max(map1.values()))#会直接比较后面数值的大小,取出啊90
# 二需求不但要取出来数值最大的还要对应前面key,就需要用到ZIP了
# print(list(max(zip(map1.values(),map1.keys()))))
# map1={"ab":18,"ac":20,12:"89","zs":90}
# max(map1) #因为key里出现了不同类型的数据,是不能拿来比较的。
# 3.max(,key=)终极玩法,用key实现比较 例题:
# li1 = [
# {"name": "zhansan", "age": 19},
# {"name": "mutouliu", "age": 41},
# {"name": "lisu", "age": 40}
# ] # 取出年龄最大的那个方法
# print(max(li1, key=lambda x: x["age"])) #key后面可以直接定义符合条件的匿名函数取出来。
# 4.min()用法和max一样只是一个是找大的一个是找小.的。
# 5.frozenset本函数是返回一个冻结的集合。所谓冻结就是这个集合不能再添加或删除任何集合里的元素。因此与集合set的区别,就是set是可以添加或
# 删除元素,而frozenset不行。frozenset的作用就是速度快,它是使用hash算法实现。参数iterable是表示可迭代的对象,比如列表、字典、元组。
# # 例题: frozenset()
# l = [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9]
# print(len(l), l)#打印列表的长度。并且显示列表的内容
# set1 = frozenset(l)#把变量L生成冻结的集合并赋值给set1
# print(len(set1), set1)#打印生成的集合长度及值
# 6.eval()把字符串里数据结构原封不动提取出来转换为对应的类型,还可以计算字符串里的表达式。
# map1='{"a":"1","a":"1","a":"1", "a":"1"}'
# list1='["a","b","b"]'
# tuple1="(1,2,3,4,5,6)"
# print(type(eval(map1)))
# print(type(eval(list1)))
# print(type(eval(tuple1)))#会原封不动的把这些字符串转换为对应的类型格式
# str2="3+4*(6%2-3)*2"
# print(eval(str2)) #可以直接把里面的表达式计算出来得到-21
# 7.ord()把字符转换为对应的ASCII里的值和chr相反
# print(ord("a"))
# print(chr(97))
# 8.pow(x,y,z)求 x ** y % z 值
# print(pow(2,3,3))
# 9.reversed()反转某个值的量排列顺序。生成的是一个迭代器。
# li1=[1,2,3,4,5,6,7]
# li2=list(reversed(li1))
# print(li1)
# print(li2)
# 10.round()四舍五入
# print(round(3.55))
# 11. slice切片
# l="helloword"
# l1=slice(3,5)
# print(l[3:5])#取头不取尾 只有3 4
# print(l[l1])
# l2=slice(1,4,2)#取出1到4 步长为2
# print(l[l2])
# print(l2.start)#打印切片的开始
# print(l2.stop)#打印切片的结束
# print(l2.step)#打印此切片的步长
# 12.sorted()排序
# li=[91,32,6,0,13,98]
# print(sorted(li)) #会按照从小到大的排序。
# map1={"zhangsan":1000,
# "lisi":980,
# "suwu":1200,
# "xiaosi":2900
# }
# print(sorted(map1))#这样默认的排序是按key里的字母按照ascii表里的先后顺序排序
# print(sorted(map1.values()) )#按照字典里的values值进行排序
# print(sorted(map1,key=lambda key:map1[key]))#注解每次的for循环取出map1的key,取出对应的值就是map1[key]
# print(sorted(zip(map1.values(),map1.keys())))
# 13.str()变成字符串。 type显示数据的类型。
# li1=[1,2,3,4,5]
# map1={("a","b","c"),(1,2,3)}
# set1={2,3,4,5}
# tuple1=(3,4,5,)
# print(str(li1))
# print(type(str(li1)))
# print(type(str(map1)))
# print(type(str(set1)))
# print( type(str(tuple1)))
# 14.sum求和
# li=[23,22,56,78,99,44,22]
# print(sum(li))
# 15.vars() 以字典的形式展示函数或数据的有关说明
# name="a"
# def li():
# name="b"
# print(locals())
# print(vars())
# li()
# print(vars(set))