Python使用combinations实现排列组合的方法


Posted in Python onNovember 13, 2018

好久没有写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大,心仪已久加上一时脑热就入手了。以为会有多么开心,其实目前最大的感受就是焦虑!担心电动车被偷,担心电池被偷,担心路上突然被交警叔叔拦下!我想,直到我的小牛真的被偷的那天,这种焦虑才会随之消失。唉,要说这样的焦虑怎么来的,我只能呵呵了:)

下面步入正题:

今天在帮我们家王博处理专利数据的时候,需要对专利数据中的城市和专利主体的合作关系数量进行统计。一项专利其写作主体可能由两个或两个以上主体参与,各个主体又分属不同或者相同的城市,对其合作关系数量进行统计,其实就是对主体及城市进行排列组合。Python的itertools库中提供了combinations方法可以轻松的实现排列组合。使用之前我先自己写了个简单的测试,代码如下:

from itertools import combinations
test_data = {'a', 'a', 'a', 'b'}
for i in combinations(test_data, 2):
 print i

上面的代码执行后输出为:

('a', 'b')

这样的输出结果让我觉得很困惑,我预期的结果是:

('a', 'a')
('a', 'a')
('a', 'b')
('a', 'a')
('a', 'b')
('a', 'b')

同一个专利里面的主体不会有重复的情况,但是主体所在的城市就会出现重复的情况,如果使用combinations在进行排列组合时主动忽略掉了重复的值,那我就只能自己来实现城市的排列组合了!自己实现排列组合也不难,但是这似乎不符合Python的风格。再次走读测试代码,突然想到自己构造的输入数据是不是有问题。

然后改成了下面这样:

from itertools import combinations
test_data = ['a', 'a', 'a', 'b']
for i in combinations(test_data, 2):
 print i

将大括号换成了中括号后输出结果与预期完全一致!这让我相当困惑。首先是官方文档对combinations方法的介绍说的是:Elements are treated as unique based on their position, not on their value.,意思是combinations处理传入的可迭代参数时是根据迭代元素的位置来确定是否唯一的,和元素的值是否唯一没有关系。那使用{}和[]构建的输入数据有什么不同呢?本来是想写这篇博客记录一下问题,等高手解答或者自己日后再来查证,结果一边写一边整理思路,居然被我找到原因了!

其实很简单:使用大括号{}创建的是集合或者字典,使用中括号[]创建的是数组,而集合具有互异性!

所以不管我在{}里面写了多少个a,其实我传入到combinations方法里面的参数值都只是:'a','b'。知道真相的我表示好尴尬,本来以为遇到一个多么深奥的问题,原来只是我Python的基础知识太欠缺了!搞得我都不好意思把这篇博客发出来了(捂脸)

以上这篇Python使用combinations实现排列组合的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中operator模块的操作符使用示例总结
Jun 28 Python
Django自定义用户认证示例详解
Mar 14 Python
python skimage 连通性区域检测方法
Jun 21 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python定义函数实现累计求和操作
May 03 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
python生成n个元素的全组合方法
Nov 13 #Python
python组合无重复三位数的实例
Nov 13 #Python
python自动化生成IOS的图标
Nov 13 #Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 #Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 #Python
python判断输入日期为第几天的实例
Nov 13 #Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 #Python
You might like
php面向对象值单例模式
2016/05/03 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
javascript document.referrer 用法
2009/04/30 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
Node.js简单入门前传
2017/08/21 Javascript
vue中轮训器的使用
2019/01/27 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
Python函数参数类型*、**的区别
2015/04/11 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
python如何爬取个性签名
2018/06/19 Python
Python实现FM算法解析
2019/06/18 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
项目施工员岗位职责
2014/03/09 职场文书
八项规定整改方案
2014/10/01 职场文书
房地产项目合作意向书
2015/05/08 职场文书
车辆挂靠协议书
2016/03/23 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL