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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python计算书页码的统计数字问题实例
Sep 26 Python
Python中用于返回绝对值的abs()方法
May 14 Python
开始着手第一个Django项目
Jul 15 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
django 类视图的使用方法详解
Jul 24 Python
简单的Python调度器Schedule详解
Aug 30 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 Python
django序列化时使用外键的真实值操作
Jul 15 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
初识Laravel
2014/10/30 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
CSS常用网站布局实例
2008/04/03 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
javascript this详细介绍
2016/09/19 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
wxpython绘制音频效果
2019/11/18 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python 如何快速复制序列
2020/09/07 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
政府班子四风问题整改措施
2014/10/04 职场文书
幼儿园感谢信
2015/01/21 职场文书
办公室岗位职责范本
2015/04/11 职场文书
同事去世追悼词
2015/06/23 职场文书
关于远足的感想
2015/08/10 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python