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 正则表达式操作指南
May 04 Python
python实现ipsec开权限实例
Nov 11 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
Python断言assert的用法代码解析
Feb 03 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
pycharm运行scrapy过程图解
Nov 22 Python
python3 webp转gif格式的实现示例
Dec 10 Python
PyCharm如何导入python项目的方法
Feb 06 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
什么是makefile? 如何编写makefile?
2012/08/08 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
数控技术专科生自我评价
2014/01/08 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
初中作文评语大全
2014/04/23 职场文书
应用心理学专业求职信
2014/08/04 职场文书
小学优秀学生评语
2014/12/29 职场文书
单位实习鉴定评语
2015/01/04 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏