如何用itertools解决无序排列组合的问题


Posted in Python onMay 18, 2017

最近我作为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 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
Python全栈之列表数据类型详解
Oct 01 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
python小白切忌乱用表达式
May 29 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
pytorch中index_select()的用法详解
Jan 06 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 #Python
Python中正则表达式详解
May 17 #Python
python算法演练_One Rule 算法(详解)
May 17 #Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 #Python
Python入门_学会创建并调用函数的方法
May 16 #Python
Python入门_浅谈逻辑判断与运算符
May 16 #Python
Python入门_条件控制(详解)
May 16 #Python
You might like
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
c#中的实现php中的preg_replace
2009/12/21 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
PHP静态成员变量
2017/02/14 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
Node.js实现文件上传
2016/07/05 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
清除输入框内的空格
2016/12/21 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
浅谈python中get pass用法
2019/03/19 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
python redis存入字典序列化存储教程
2020/07/16 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
小学教师办公室制度
2014/02/03 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
抢劫罪辩护词
2015/05/21 职场文书
闪闪的红星观后感
2015/06/08 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电