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实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python如何删除文件中重复的字段
Jul 16 Python
Python matplotlib画曲线例题解析
Feb 07 Python
Python递归实现打印多重列表代码
Feb 27 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
python爬虫实现获取下一页代码
Mar 13 Python
python能开发游戏吗
Jun 11 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
详解Python类和对象内容
Jun 22 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
安装APACHE
2007/01/15 PHP
php类中private属性继承问题分析
2012/11/01 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP二维数组去重算法
2016/12/17 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
pytorch 共享参数的示例
2019/08/17 Python
Python绘图实现显示中文
2019/12/04 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
出纳岗位职责
2013/11/09 职场文书
我的求职计划书
2014/01/10 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python