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模块学习 filecmp 文件比较
Aug 27 Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
对Python 数组的切片操作详解
Jul 02 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
pandas删除指定行详解
Apr 04 Python
django基础学习之send_mail功能
Aug 07 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
python处理写入数据代码讲解
Oct 22 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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关联链接常用代码
2012/11/05 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
php简单判断文本编码的方法
2015/07/30 PHP
php生成动态验证码gif图片
2015/10/19 PHP
详解YII关联查询
2016/01/10 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
Python的动态重新封装的教程
2015/04/11 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python configparser模块操作代码实例
2020/06/08 Python
python利用opencv保存、播放视频
2020/11/02 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
党委书记岗位职责
2013/11/24 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
小学教育见习总结
2015/06/23 职场文书
党纪处分决定书
2015/06/24 职场文书
教师旷工检讨书
2015/08/15 职场文书