文档章节

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

好铁
 好铁
发布于 2016/03/04 00:24
字数 304
阅读 953
收藏 2

hackerrank 中有这样一个题:

给定一个字符串, 输出出现次数最多的前三个字符, 若两字符出现次数相同, 则按字典顺序排列.

# 样例输入

aabbbccde

# 样例输出

b 3
a 2
c 2



就是先将第二字段降序排序, 再将第一字段升序排序, 关键就是sorted函数key的指定, 可以用 lambda 或  operator.itemgetter


开始我是这样做的:

from collections import Counter
c = Counter(input())
l=sorted(c.items(), key=lambda s:(-s[1], s[0]))
for i in l[:3]:
    print(' '.join(map(str, list(i))))




EDITORIAL给出了三个参考解:

1.利用字母表

S = raw_input()
letters = [0]*26

for letter in S:
    letters[ord(letter)-ord('a')] += 1

for _ in range(3):

    max_letter = max(letters)

    for index in range(26):
        if max_letter == letters[index]:
            print chr(ord('a')+index), max_letter
            letters[index] = -1
            break

2.

from collections import Counter
from operator import itemgetter

for item in (sorted(sorted(Counter(raw_input()).items()), key = itemgetter(1), reverse = True)[:3]):
    print item[0], item[1]

3.

from collections import Counter

for letter, counts in sorted(Counter(raw_input()).most_common(),key = lambda x:(-x[1],x[0]))[:3]:
    print letter, counts
most_common 的行为可能在python 2和3之间不同, 没仔细研究


参考:

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=429659&id=3140368

http://stackoverflow.com/questions/6666748/python-sort-list-of-lists-ascending-and-then-decending

http://stackoverflow.com/questions/5212870/sorting-a-python-list-by-two-criteria

© 著作权归作者所有

好铁
粉丝 39
博文 267
码字总数 78926
作品 0
朝阳
程序员
私信 提问
内置函数sorted的10个小tips

用于对集合进行排序(这里说的集合是对可迭代对象的一个统称,他们可以是列表、字典、set、甚至是字符串),它的功能非常强大,本文将深入浅出地介绍 sorted 的各种使用场景。 1、默认排序 ...

刘志军
2018/11/27
0
0
python-django中models的Meta内部类设置

  简介      Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。      abstract   这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据...

运维菜
2018/02/03
0
0
django meta 类的使用方法

通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharField(maxlength=30) class Meta: # ... Model 元数据就是 "不是一个字段......

宁宁123韩
2014/07/21
95
1
php多维数组自定义排序 uasort()

php内置的排序函数很多;正反各种排; 常用的排序函数: sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键,以升序对关...

白俊遥
2016/04/04
14
0
Leetcode【406、763、861、1094】

问题描述:【Sort】406. Queue Reconstruction by Height 解题思路: 这道题是假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是排在这个...

牛奶芝麻
07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
9
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
7
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部