Python3写法

代码

  1. # -*- coding: utf-8 -*-
  2. # 需求:年龄倒序,姓名正序
  3. from itertools import chain
  4. from pypinyin import pinyin, Style
  5. class Student:
  6. def __init__(self, name, age):
  7. self.name = name
  8. self.age = age
  9. def to_pinyin(stu):
  10. lst = pinyin(stu.name, style=Style.TONE3) # 例:[['zhang1'], ['san1']]
  11. print(lst)
  12. iterator = chain.from_iterable(lst) # 迭代器
  13. iterator_for_print = chain.from_iterable(lst) # 迭代器
  14. print(iterator_for_print)
  15. for item in iterator_for_print:
  16. print(item)
  17. # 写法一
  18. return ''.join(iterator)
  19. # 写法二
  20. # return ''.join(chain.from_iterable(pinyin(stu.name, style=Style.TONE3)))
  21. studentList = [
  22. Student("张三", 25),
  23. Student("小红", 22),
  24. Student("王五", 25),
  25. Student("小张", 22),
  26. Student("李四", 25),
  27. Student("小明", 22)
  28. ]
  29. # 写法一
  30. # studentList.sort(key=lambda stu: pinyin(stu.name, style=Style.TONE3))
  31. # 写法二
  32. studentList.sort(key=lambda stu: to_pinyin(stu))
  33. studentList.sort(key=lambda stu: stu.age, reverse=True)
  34. print("排序结果:")
  35. for student in studentList:
  36. print(str(student.age) + " " + student.name)

输出结果

Python2写法

代码

  1. # -*- coding: utf-8 -*-
  2. # 需求:年龄倒序,姓名正序
  3. from itertools import chain
  4. from pypinyin import pinyin, Style
  5. class Student:
  6. def __init__(self, name, age):
  7. self.name = name
  8. self.age = age
  9. def to_pinyin(stu):
  10. lst = pinyin(stu.name.decode("utf-8"), style=Style.TONE3) # 例:[['zhang1'], ['san1']]
  11. print(lst)
  12. iterator = chain.from_iterable(lst) # 迭代器
  13. iterator_for_print = chain.from_iterable(lst) # 迭代器
  14. print(iterator_for_print)
  15. for item in iterator_for_print:
  16. print(item)
  17. # 写法一
  18. return ''.join(iterator)
  19. # 写法二
  20. # return ''.join(chain.from_iterable(pinyin(stu.name.decode("utf-8"), style=Style.TONE3)))
  21. studentList = [
  22. Student("张三", 25),
  23. Student("小红", 22),
  24. Student("王五", 25),
  25. Student("小张", 22),
  26. Student("李四", 25),
  27. Student("小明", 22)
  28. ]
  29. # 写法一
  30. # studentList.sort(key=lambda stu: pinyin(stu.name.decode("utf-8"), style=Style.TONE3))
  31. # 写法二
  32. studentList.sort(key=lambda stu: to_pinyin(stu))
  33. studentList.sort(key=lambda stu: stu.age, reverse=True)
  34. print("排序结果:")
  35. for student in studentList:
  36. print(str(student.age) + " " + student.name)

输出结果

C#的示例

代码

  1. List<Student> list = new List<Student>()
  2. {
  3. new Student("张三", 25),
  4. new Student("小红", 22),
  5. new Student("王五", 25),
  6. new Student("小张", 22),
  7. new Student("李四", 25),
  8. new Student("小明", 22)
  9. };
  10. //方法一,虽然写法繁琐,但思路清晰
  11. list.Sort((a, b) =>
  12. {
  13. if (a.Age != b.Age)
  14. {
  15. return b.Age - a.Age;
  16. }
  17. else
  18. {
  19. return string.Compare(a.Name, b.Name);
  20. }
  21. });
  22. //方法二,简捷清晰明了
  23. //list = list.OrderByDescending(a => a.Age).ThenBy(a => a.Name).ToList();
  24. foreach (var item in list)
  25. {
  26. Console.WriteLine(item.Age + " " + item.Name);
  27. }
  28. Console.Read();
  29. class Student
  30. {
  31. public string Name { get; set; }
  32. public int Age { get; set; }
  33. public Student(string name, int age)
  34. {
  35. Name = name;
  36. Age = age;
  37. }
  38. }

输出结果

对比C#,Python的坑

  1. Python默认的中文排序得不到预期的结果,需要引用pypinyin库解决,相当麻烦,要看懂这个代码,需要了解迭代器
  2. Python2的pypinyin库只支持unicode编码的字符串,必须通过decode转码,如果不转码,则抛出错误:must be unicode string or [unicode, ...] list
  3. Python没有大括号,无法直接在lambda表达式中写方法,方法必须定义在lambda表达式外部
  4. Python的lambda写法相对难以理解

经验丰富的程序员会说,这还不简单?

但是对于新手来说,非常不人性化,非常浪费时间。

我作为一个Python新手,就写个简单的排序程序,花了很长时间才学会怎么写,当然,确实没有去看文档,只通过百度和在技术群里问,但是没有一个一口答出正确答案,最后自己摸索成功。

有人说Python2忘的差不多了,C#就不会忘。

用到pypinyin库时,还不习惯看pypinyin库的源码,pinyin方法的注释非常详细,不过没有C#这种强类型的语言看起来方便。

Python 根据两个字段排序 中文排序 汉字排序 升序 降序的更多相关文章

  1. C# List.sort排序详解(多权重,升序降序)

    很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...

  2. mysql字段有中英文,数字按照升序/降序 排序

    ORDER BY    CONVERT(name,SIGNED) ASC,    CONVERT(name USING gbk) DESC

  3. 【java】实体类中 按照特定的字段 进行升序/降序 排序

    背景: 实际页面上  所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中: {"ownPTotal":"10>0","ownO ...

  4. TreeMap升序|降序排列和按照value进行排序

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  5. C# List.sort排序(多权重,升序降序)

    很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...

  6. HTML中实现Table表头点击升序/降序排序

    题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...

  7. python 根据两个字段排序, 一个升序, 一个降序

    from collections import Counter c = Counter(input()) l=sorted(c.items(), key=lambda s:(-s[], s[])) ] ...

  8. Java Collection.sort 排序升序, 降序问题

    不多说,记住2点, 直接上代码(下面是降序): package mall; import java.util.ArrayList; import java.util.Collections; impo ...

  9. 010.Oracle数据库 , ORDER BY 按升序降序排序

    /*Oracle数据库查询日期在两者之间*/ SELECT DISTINCT ATA FROM LM_FAULT WHERE ( OCCUR_DATE BETWEEN to_date( '2017-0 ...

随机推荐

  1. Excel 查找函数(一):LOOKUP

    序号 员工姓名 部门 职务 1 苏霞 法务部 法律顾问 2 包志林 财务部 财务总监 3 林娥云 安监部 部长 4 石少卿 质检部 质检员 5 于炳福 生产部 生产部 6 蒋琼志 仓储部 保管员 7 ...

  2. [CF1526D] Kill Anton(逆序对,搜索)

    题面 A N T O N \rm ANTON ANTON 的基因由 A , N , T , O \rm A,N,T,O A,N,T,O 四种碱基排列组成. A N T O N \rm ANTON AN ...

  3. 实时降噪(Real-time Denoising):Spatio-Temporal Filtering

    目录 空间滤波(Spatial Filtering) 基于距离的高斯滤波 双边滤波(Bilateral filtering) 联合双边滤波(Joint Bilateral filtering)[201 ...

  4. ubuntu下安装python

    一.安装python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6 如显示不能添加"'ppa:~jonathonf/ubuntu/p ...

  5. java 验证手机号是否合法

    一.通用工具类编写 /** * @project * @Description * @Author songwp * @Date 2022/9/15 17:06 * @Version 1.0.0 ** ...

  6. Grafana Loki 学习之踩坑记

    转发自:https://mp.weixin.qq.com/s/zfXNEkdDC9Vqd9lh1ptC1g Grafana 出品的 loki 日志框架完美地与 kubernetes 的 label 理 ...

  7. Kubernetes DevOps: Jenkins Pipeline (流水线)

    要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...

  8. ES重要配置解析

    path.data和path.logs 如果您使用.zip或.tar.gz存档,则data和logs 目录是子文件夹$ES_HOME.如果这些重要文件夹保留在其默认位置,则在将Elasticsearc ...

  9. Elasticsearch:正确使用regexp搜索

  10. jenkins修改默认的workspace工作目录

    1.首先,找到Jenkins安装根目录,寻找config.xml文件,在config.xml文件内,查找 workspaceDir 关键字,将你的自定义 工作空间根目录 地址替换默认的地址 # cd ...