如何用itertools解决无序排列组合的问题
最近我作为Python菜鸟一枚开始征战Codewars,所以打算在这里记下遇到的有意思的题目。今天这第一题叫做“Best Travel”:
John和Mary计划去一些小镇旅行。Mary已经列好了这些小镇之间的距离比如ls=[50, 55, 57, 58, 60]。但是John不想开车太累,所以提出了两个要求:1) 开车不超过某个距离比如t=174 miles 2) 只能去3个小镇。
选择哪3个小镇可以让John和Mary都满意呢?(即找到距离之和最接近或等于t的3个小镇)
这道题目可以抽象成:
输入一个整数列表ls和整数t:
1. 找出从ls中任取三个元素的所有组合
2. 计算每个组合的三个元素之和
3. 如果存在小于或等于t的和,那么从中挑出最大的,然后输出这个最大和对应的三元素组合
4. 如果不存在,只好返回None
实现要点:
1. 无序排列组合:
用itertools模块的combinations方法
2. 求和:
用sum函数
3. 求最大值:
用max函数
4. 捕获异常:
用try-except
借用这一题的某个best solution, 实现代码为:
def choose_best_sum(t, k, ls): import itertools try: return max(sum(combination) for combination in itertools.combinations(ls, k) if sum(combination) <= t) except: return None
以上这篇如何用itertools解决无序排列组合的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
python 排列组合之itertools
python 2.6 引入了itertools模块,使得排列组合的实现非常简单: 复制代码 代码如下: import itertools 有序排列:e.g., 4个数内选2个排列: 复制代码 代码如下: >>> print list(itertools.permutations([1,2,3,4],2))[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4,
-
如何用itertools解决无序排列组合的问题
最近我作为Python菜鸟一枚开始征战Codewars,所以打算在这里记下遇到的有意思的题目.今天这第一题叫做"Best Travel": John和Mary计划去一些小镇旅行.Mary已经列好了这些小镇之间的距离比如ls=[50, 55, 57, 58, 60].但是John不想开车太累,所以提出了两个要求:1) 开车不超过某个距离比如t=174 miles 2) 只能去3个小镇. 选择哪3个小镇可以让John和Mary都满意呢?(即找到距离之和最接近或等于t的3个小镇) 这道题目可
-
如何用Java实现排列组合算法
需求 我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些"奇妙"的反应,由于不确定怎么组合,就需要将所有的组合都列出来进行尝试. 抽象一下就是从一个集合中取出任意元素,形成唯一的组合.如[a,b,c]可组合为[a].[b].[c].[ab].[bc].[ac].[abc]. 要求如下: 组合内的元素数大于 0 小于等于 数组大小: 组合内不能有重复元素,如 [aab] 是不符合要求的组合: 组合内元素的位置随意,即 [ab] 和 [ba] 视为同一种组合:
-
Python基于回溯法子集树模板解决数字组合问题实例
本文实例讲述了Python基于回溯法子集树模板解决数字组合问题.分享给大家供大家参考,具体如下: 问题 找出从自然数1.2.3.....n中任取r个数的所有组合. 例如,n=5,r=3的所有组合为: 1,2,3 1,2,4 1,2,5 1,3,4 1,3,5 1,4,5 2,3,4 2,3,5 2,4,5 3,4,5 分析 换个角度,r=3的所有组合,相当于元素个数为3的所有子集.因此,在遍历子集树的时候,对元素个数不为3的子树剪枝即可. 注意,这里不妨使用固定长度的解. 直接套用子集树模板.
-
解决mysql 组合AND和OR带来的问题
如下所示: SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id= 1003 AND prod_price >= 10; 上面这条语句 返回的结果不是我们想要的. 分析: 原因在于计算的次序.SQL 在处理OR操作符前 优先处理AND操作符.当SQK看到上述WHERE子句时,由于AND在计算次序中优先级更高,操作符被错误的组合了. 此问题的解决方法是使用圆括号明确地分组相应的操作符. 请看下面的SELE
-
c# 如何用lock解决缓存击穿
背景 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力. 解决方案 1.设置热点数据永远不过期. 2.加互斥锁,互斥锁参考代码如下: 2.1.根据key生成object() private static object GetMemoryCacheLockObject(string key) { string cacheLockKey = string.Format(Memor
-
C语言 如何用堆解决Topk问题
目录 前言 TopK问题 解题方法 代码实现与讲解 运行结果 函数解读 PrintTopK 解读 TestTopK 解读 前言 本篇将详细讲解如何利用小根堆的方法解决TopK问题,这么多数据要处理, 该算法时间复度居然只需 TopK问题 TopK问题介绍:在N个数中找出最大的前K个 (比如在1000个数中找出最大的前10个) 解题方法 方法1:先排降序,前N个就是最大的. 时间复杂度: 方法2:N个数依次插入大堆,HeapPop K次,每次取堆顶的数据,即为前K个. 时间复杂度: 假设N非
-
如何用Nginx解决前端跨域问题
前言 在开发静态页面时,类似Vue的应用,我们常会调用一些接口,这些接口极可能是跨域,然后浏览器就会报cross-origin问题不给调. 最简单的解决方法,就是把浏览器设为忽略安全问题,设置--disable-web-security.不过这种方式开发PC页面到还好,如果是移动端页面就不行了. 解决办法 使用Nginx转发请求.把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址. 举个栗子 例如我们在开发一个Vue应用. 原先: 调试页面是: http://192.168.1.1
-
在Python中使用itertools模块中的组合函数的教程
理解新概念 Python V2.2 中引入了迭代器的思想.唔,这并不十分正确:这种思想的"苗头"早已出现在较老的函数 xrange() 以及文件方法 .xreadlines() 中了.通过引入 yield 关键字,Python 2.2 在内部实现的许多方面推广了这一概念,并使编程定制迭代器变得更为简单( yield 的出现使函数转换成生成器,而生成器反过来又返回迭代器). 迭代器背后的动机有两方面.将数据作为序列处理通常是最简单的方法,而以线性顺序处理的序列通常并不需要都同时实际 存在
-
用好Regsvr32 解决系统疑难杂症
初识Regsvr32 想必Regsvr32大家一定都不陌生吧,在一些电脑教程或电脑杂志上总能看到它的身影,可如此一个高出镜率的 "小明星"在我们很多人的眼里却显得十分的神秘,原来一般的文章都很少对它进行介绍,最多只是了了几句介绍一下如何用它解决常见问题,好多朋友可能都已经在一些文章的指导下使用过好多次Regsvr32了,但对它的"身世"却依然不了解,今天笔者就借这篇文章打消大家脑海里的疑团,带大家一起去认识一下这个Regsvr32. Regsvr32的背景与功能 R
-
Python实现的排列组合计算操作示例
本文实例讲述了Python实现的排列组合计算操作.分享给大家供大家参考,具体如下: 1. 调用 scipy 计算排列组合的具体数值 >> from scipy.special import comb, perm >> perm(3, 2) 6.0 >> comb(3, 2) 3.0 2. 调用 itertools 获取排列组合的全部情况数 >> from itertools import combinations, permutations >>
随机推荐
- flex中使用RadioButtonGroup时取出所选项的值的方法
- Python socket网络编程TCP/IP服务器与客户端通信
- Spring Boot实现跨域访问实现代码
- asp.net 生成数字和字母组合的随机数
- 详解nodejs模板引擎制作
- 多字段模糊搜索的函数
- C#实现异步连接Sql Server数据库的方法
- JavaScript:Date类型全面解析
- 一个简单的ASP+AJAX留言本源码下载
- php多个文件及图片上传实例详解
- ionic实现下拉刷新载入数据功能
- 系统安装时文件系统的选择
- laravel 中如何使用ajax和vue总结
- “电脑一族”应补肝
- Python中Threading用法详解
- ubuntu下的虚拟环境中安装Django的操作方法
- 服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?
- 记一次用vue做的活动页的方法步骤
- Eclipse/MyEclipse转IntelliJ IDEA完全攻略(图文)
- python实现扫描ip地址的小程序