CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Sort Array by Element Frequency】:对给定的可迭代对象,按照它们在列表中出现的次数进行排序,如果两个元素出现的次数相同,则按照元素在原来列表出现的先后顺序进行排序。

【链接】:https://py.checkio.org/mission/sort-array-by-element-frequency/

【输入】:可迭代的列表

【输出】:排序后的列表

【前提】:元素可以是 int 或 string 类型

【范例】

frequency_sort([4, 6, 2, 2, 6, 4, 4, 4]) == [4, 4, 4, 4, 6, 6, 2, 2]
frequency_sort(['bob', 'bob', 'carl', 'alex', 'bob']) == ['bob', 'bob', 'bob', 'carl', 'alex']

解题思路

利用 collections 模块的 Counter() 方法,统计元素的出现次数,将元素作为 key,出现次数作为 value,以字典的键值对形式存储,调用 most_common() 方法将其按照出现次数进行排序

排序过后是一个列表,列表内元素为元组的形式,遍历该列表,将元素乘以其出现的次数,依次添加到一个新的列表当中,这个新列表就是排序过后的列表

代码实现

from collections import Counterdef frequency_sort(items):items2 = []items = Counter(items).most_common()for i in items:items2.extend([i[0]] * i[1])return items2if __name__ == '__main__':print("Example:")print(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4]))# These "asserts" are used for self-checking and not for an auto-testingassert list(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4])) == [4, 4, 4, 4, 6, 6, 2, 2]assert list(frequency_sort(['bob', 'bob', 'carl', 'alex', 'bob'])) == ['bob', 'bob', 'bob', 'carl', 'alex']assert list(frequency_sort([17, 99, 42])) == [17, 99, 42]assert list(frequency_sort([])) == []assert list(frequency_sort([1])) == [1]print("Coding complete? Click 'Check' to earn cool rewards!")

大神解答

大神解答 NO.1

def frequency_sort(items):return sorted(items, key=lambda x: (-items.count(x), items.index(x)))

大神解答 NO.2

from collections import Counter
from itertools import repeatdef frequency_sort(items):return [x for y in (repeat(*x) for x in Counter(items).most_common()) for x in y]

【Python CheckiO 题解】Sort Array by Element Frequency相关推荐

  1. Python CheckiO 题解系列 丨 博客目录索引

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...

  2. 【Python CheckiO 题解】Index Power

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  3. 【Python CheckiO 题解】Median

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  4. 【Python CheckiO 题解】Absolute Sorting

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  5. 【Python CheckiO 题解】Even the Last

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  6. 【Python CheckiO 题解】Flatten a List

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  7. 【Python CheckiO 题解】Non-unique Elements

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  8. 【Python CheckiO 题解】Army Battles

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  9. 【Python CheckiO 题解】Date and Time Converter

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

最新文章

  1. 3d旋转相册代码源码_如何使用CSS开发精美3D旋转相册?
  2. OA服务器重装操作系统恢复配置
  3. PHP中错误处理集合
  4. linux awk f,linux的awk详情(上)
  5. ms sql 触发器( 转)
  6. php 中curd表达啥,thinkphp的CURD和查询方式介绍
  7. 15个友好的jQuery 提示框插件
  8. Hive的数据库和表
  9. Ubuntu 安装 Eclipse C/C++开发环境
  10. 基于强化学习的倒立摆控制策略Matlab实现(附代码)
  11. Django下载服务器文件到本地
  12. Scikit-learn 秘籍 第五章 模型后处理
  13. 监控系统 服务器配置,监控系统服务器配置
  14. linux命令行 jdb,什么使用加多宝(jdb)在linux下调试Java程序
  15. 【任务二】打卡——by 003-Vamein
  16. 高可用和热备份是什么意思?
  17. 利用easyui实现 菜单节点和选项卡的联动效果
  18. Virtualbox虚拟机安装win10系统卡顿
  19. 微信小程序实现音乐播放器(1)
  20. UE4 AI移动到 出现的BUG以及解决方案

热门文章

  1. “Transaction rolled back because it has been marked as rollback-only”
  2. linux 修改消息队列大小
  3. cocos2d对动画的各种操作
  4. .netframework3.5 中TimeZoneInfo 类的使用
  5. [剑指offer][JAVA]面试题[51][数组中的逆序对][归并排序]
  6. opencv resize_opencv-python库基础操作(一)
  7. wampserver php乱码,WampServer搭建php环境可能遇到的问题
  8. python爬虫数据可视化_python 爬虫与数据可视化--python基础知识
  9. 怎么用树莓派制作web服务器,用树莓派做web服务器,靠谱吗?
  10. oracle死锁视频教程,两个Oracle死锁解决实例