博客
关于我
Pthon(十一)sorted函数
阅读量:384 次
发布时间:2019-03-05

本文共 3104 字,大约阅读时间需要 10 分钟。

需求1:快速生成验证码(内推码)

import random# 了解该模块的方法!import string# 数字和字母(大小写)-->构成列表(字符串)--->截取若干数字code_str = string.ascii_letters + string.digits# code_str1 = string.ascii_lowercase# code_str2 = string.ascii_uppercase# 默认参数def gen_code(len=4):    #     code = ''    #     for i in range(len):    #         new_s = random.choice(code_str)    #         code += new_s    #    #     return code    #  join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串    return ''.join(random.sample(code_str, len))# 产生若干个验证码-->列表生成式!print([gen_code() for i in range(10)])

二、高阶函数sorted函数

(1)sort排序回顾

list1 = [1, 6, 5, 8, 3]tulpe1 = (1, 6, 5, 8, 3)# 强调:只有list列表有此方法(元组没有此方法),是原址排序!!!list1.sort()print(list1)

(2)sorted高阶排序

# 注意:辩证sort和sorted的区别!list1 = [1, 5, 3, 7, 10, 9, 18]list2 = sorted(list1)print(list1)print('-----------------')print(list2)print(list1 is list2) False# 说明:sorted开辟了一个新的地址空间--->对原来数据的拷贝,新的地址保存!

        2.1)默认排序

说明:排序的对象是可迭代的对象即可,相比sort更宽容!

字典排序:默认会按照dict的key值进行排序,最后返回的结果是一个对key值排序好的list!

排序的控制方式:基于key函数(可以做文章)、基于cmp函数(了解)、基于reverse函数(默认是False,降序排序)!

##########key函数的说明###########

(1)内置函数进行排序

python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数

特点:此函数将在每个元素比较前被调用,key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较

通俗的讲:排序并不由元素而决定,而是根据key指定调用函数的结果决定

练习1

# 需求1:正负数绝对值排序!list4=[1,-5,3,-10,9,8,-12,6,13]list5= sorted(list4,key=abs) #python内置的abs函数print(list5)# [1, 3, -5, 6, 8, 9, -10, -12, 13]

练习2

# 需求:字符串的比较# 说明:Ascii-->大写
<小写list6=['dfs','fds','tda','eds']print(list6)# 默认以ascii比较--->
大写
<小写(所以大写在前,小写在后)print(sorted(list6))# 需求:转换为小写后进行比较print(sorted(list6,key="str.lower))#" 需求:转化为大写后进行比较print(sorted(list6,key="str.upper))#" 需求:说明的是-->
recersed是将排序后的结果进行反转!print(sorted(list6,key=str.upper,reversed=True))

(2)自定义函数进行排序

需求1

"""1.假设我们用一组tuple表示学生名字和成绩,L =[('Bob', 75), ('Adam', 92), ('Bart',66),('Lisa', 88)],1-->按名字进行排序(不歧视)2-->按成绩进行排序"""L =[('Bob', 75), ('Adam', 92), ('Bart', 66),('Lisa', 88)]print(sorted(L,key=lambda x:x[0]))# 按照成绩进行排序print(sorted(L,key=lambda x:x[1]))

需求2

my_dict = {"a":"2", "c":"5", "b":"1"}result = sorted(my_dict)print result#默认对dict排序,不指定key参数,会默认对dict的key值进行比较排序!#result输出: ['a', 'b', 'c']result2 = sorted(my_dict, key=lambda x:my_dict[x])print result2#指定key参数,根据dict的value排序#result2输出:['b', 'a', 'c']#注意:输出的还是key!!!

需求3

"""题目需求:(1)给定一个整形数组,将数组中所有的0移动到末尾, 非0项保持不变;(2)在原始数组上进行移动操作, 勿创建新的数组;# 输入:    第一行是数组长度, 后续每一行是数组的一条记录;    4    0     7     0     2# 输出:    调整后数组的内容;    7    2    0    0"""def move_zore(item):    if item == 0:        return 2    else:        return 1# 调用函数!for i in sorted(li,key=move_zore):    print(i)

需求4:

"""有一个整数列表(10个元素),要求调整元素的顺序:把奇数放在前面 偶数放在后面"""# 方式1list1=[1,2,19,18,16,14,13,17,22]print([i for i in sorted(list1,key=lambda j:(j+1)%2)])# 说明:相当于根据return (j+1)%2结果-->[0,1]来映射进行排序!# 方式2 -->含义大概就是偶数是2,奇数是1!#print(sorted(list1,key=lambda  x:2 if x%2 == 0 else 1))# if x%2 ==0:#     return 2# else:#     return 1

需求5:

 

info = [    # 商品名称 商品数量 商品价格    ('apple1',200,32),    ('apple2', 40, 12),    ('apple3', 1000, 23),    ('apple1', 40, 2),    ('apple1', 40, 5)]# 按照商品数量进行排序def sorted_by_count(x):    return x[1]# 按照商品价格进行排序def sorted_by_price(x):    return x[2]# 先按照商品数量进行小-大的排序,如果商品数量一样!!!-->掌握!!!# 则按照商品价格由小-大进行排序def sorted_by_count_price(x):    return x[1],x[2]print(sorted(info,key=sorted_by_count))print(sorted(info,key=sorted_by_price))print(sorted(info,key=sorted_by_count_price))

 

转载地址:http://dizwz.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>