先从例子说起:

输入数据

第一行有一个整数 t (1 ≤ t ≤ 100) ,表示有 t 组数据。

对于每组数据:

第一行有两个整数 n, m (1 ≤ n, m ≤ 100) ,表示花坛的长和宽;

接下来 n 行,每行有一个长度为 m 且由大写字母组成的的字符串,表示对应位置出现的花的种类。其中,相同的字母表示相同的花,不同的字母表示不同的花。

输出数据

对于每组数据:

第一行输出一个整数 k ,表示花坛中一共有 k 种不同的花。

接下来 k 行,每行输出一个整数 x 和一个字符 c ,表示出现了 x 个种类为 c 的花。

你需要按花出现的次数从大到小的顺序输出,如果多种花数量相同,请按花的种类从小到大输出。

样例输入

1

3 3

ABC

BBC

CCC

样例输出

3

5 C

3 B

21    1 A

1.讲思路

2.源码与他人的思路

3.好好讲讲Python里面的排序

1.这个题目的难点不在别的地方,就是排序这块。它输入的是个字母表格,我只要从字母a--z一个个去判断,是否在这个给定的字母表里面。判断好了就.count('a')计算a字母在字母表的出现频率。这样我就会得到(频率,字母)的组信息。这样下来,可能会有很多这样的,我们先要以频率大小有限排序,再要以字母大小排序。

2.源码:

#郁金香
zs = int(input());d=[];n1=[]
for i in range(zs):size = input().split()a = []; n=0 ; c=[] #第一个输出,为花的种类计数#花儿输入组成的列表for ii in range(int(size[0])):a += list(input())#完美代替。append()for iii in range(65,97):b = chr(iii)#这朵花if b in a:n = n+1f = a.count(b)#这个花出现的频率ci = (-f,b)#最关键的地方c.append(ci)c11 = sorted(c,key=lambda c:c[0])#给字符串排序d = d + c11n1.append(n)
m = -1
for i0 in n1:m += 1print(i0)for i1 in range(i0):aaa = d.pop(0)print(abs(aaa[0]),aaa[1])

别人的思路又有哪些?我得到的启发?

def test():  line = int(input())  for i in range(line):  flowers = []  row, col = [int(x) for x in input().split()]  for j in range(row):  flowers.append(input())  flowers = "".join(flowers)  d = {}  for f in flowers:  if f in d:  d[f] += 1  else:  d[f] = 1  d1 = sorted(d, key=lambda x: (-d[x], ord(x)))  print(len(d1))  for k in d1:  print(d[k], k)  if __name__ == '__main__':  test()  

最后的if语句,让函数自己也可以作为主程序。另外这位同学也用到排序的小技巧。

3.再讲讲排序

python里面的两个.sort()和sorted(),前者在现有的数据上做出改变,后者会新生成数据(b=sorted(a))。

sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
给列表排序sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
给字典的键排序并提取出来的列表
单词的首字母排序
sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
列表的元组多成分中指定以某一单位排序:
student_tuples = [
...     ('john', 'A', 15),
...     ('jane', 'B', 12),
...     ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
#这里的student是随便设置的,列表的一个单元

操作数operater下使用sort

 from operator import itemgetter, attrgetter
>>> sorted(student_tuples, key=itemgetter(2))#这里不涉及数字的排序,故当等级 相同时,原始的数字顺序保留。
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]优先级排序:
sorted(student_tuples, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
#先以等级A排序,当同时为B的时候,在以数字从小到大排序选择正反排序
sorted(student_tuples, key=itemgetter(2), reverse=True)#以数字倒序排
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
当有优先级的时候:a=[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> b=sorted(a, key=itemgetter(1,2))
>>> b
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> b=sorted(a, key=itemgetter(1,2),reverse=True)
>>> b
[('jane', 'B', 12), ('dave', 'B', 10), ('john', 'A', 15)]
倒序排的话,就会都倒叙,无法控制一个倒叙,一个顺序
小技巧:我要说的是我们可以用循环遍历先改变数字项的正负,这样就可以了!有的时候数字项既有正数也有负数,我们可以用100-原有的数,排好了之后再用100-
排好了的数还原。字母也可以用ord(),chr()与数字互换。另外:单项反序也可以直接在函数里面指定元素的负数
result = sorted(a, key=lambda x: (-x[1], x[0]))

看例子:
>>> a=[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> b=sorted(a, key=lambda x :(x[1],x[2]))
>>> b
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> b=sorted(a, key=lambda x :(x[1],-x[2]))
>>> b
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

python 各种排序相关推荐

  1. python set 排序_python set 排序_如何在Python中使用sorted()和sort()

    点击"蓝字"关注我们 ?"Python基础知识" 大卫·丰达科夫斯基  著 18财税3班 李潇潇    译 日期:2019年5月6日 一. 使用sorted() ...

  2. python列表按照指定顺序排序-Python常见排序操作示例【字典、列表、指定元素等】...

    本文实例讲述了Python常见排序操作.分享给大家供大家参考,具体如下: 字典排序 按value排序 d1 = {"name":"python","b ...

  3. Python列表排序 reverse、sort、sorted 操作方法详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级python list排序中,后两中方法还可以加入条件参数进行排序. ...

  4. python的for语句写新的字符串_python写for循环python字符串排序方法

    一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort( ...

  5. python 经典排序算法

    python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...

  6. [转载] Python列表排序 list.sort方法和内置函数sorted

    参考链接: Python中的函数 Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时 ...

  7. Python列表排序 list.sort方法和内置函数sorted

    Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法 ...

  8. python常见排序算法解析

    python--常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分 ...

  9. 送你一个Python 数据排序的好方法

    摘要:学习 Pandas排序方法是开始或练习使用 Python进行基本数据分析的好方法.最常见的数据分析是使用电子表格.SQL或pandas 完成的.使用 Pandas 的一大优点是它可以处理大量数据 ...

  10. python汉字排序_【IT专家】Python中文排序(转载)

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Python 中文排序(转载) 2012/02/02 3793 Python 比较字符串大小时,根据的是 ord 函数得到的编码 值.基于它的排序 ...

最新文章

  1. iPhone PHP获取文件,IOS中获取各种文件的目录路径的方法
  2. pku 1077 Eight
  3. CTF Re-Python z3库的使用
  4. dm9000 driver 1
  5. 为啥学java要看那么多东西_编程语言那么多,为啥学Java的人那么多?
  6. JVM 调优 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题?
  7. 随想录(学校作业和工程代码)
  8. 给Xcode增加复制行、删除行快捷键的方法
  9. C++ memset 踩坑(转载)
  10. 四 实例 图像的手绘效果
  11. python汽车类_用Python代码实现汽车类,类用,python
  12. 软件构架实践-构架模式、参考模型、参考构架
  13. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal
  14. MySQL之数据查询(多表查询)
  15. Ubuntu18 的超详细常用软件安装
  16. Ubuntu下N卡配置无法保存的解决办法
  17. ubuntu安装nvidia显卡驱动(双显卡)
  18. Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目
  19. JAVA项目-商品打折计算
  20. jsp+ssm+mysql实现的Java web家庭理财管理系统源码+运行教程+参考论文+开题报告

热门文章

  1. 跳转定义_HTML中的超级链接和锚点跳转
  2. linux shell ${}简单用法,Linux shell ${}简单用法
  3. sht-11c语言程序,温湿度传感器SHT11数据手册(中文)版.pdf
  4. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序
  5. 优化Windows电脑常见方法,提高速度,释放硬盘C盘
  6. android x86 arm translator,让x86的android模拟器能模拟arm架构系统
  7. pcf8563c语言程序,PCF8563驱动程序(C语言版)
  8. Fax Helper
  9. STM32启动过程解析-2.02固件库启动文件分析
  10. Tomcat的下载安装及使用