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结合opencv实现人脸检测与跟踪
Jun 08 Python
python验证码识别的实例详解
Sep 09 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Python request操作步骤及代码实例
Apr 13 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 Python
python 如何在测试中使用 Mock
Mar 01 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 sybase_fetch_array使用方法
2014/04/15 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
PHP7新功能总结
2019/04/14 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
jquery实现数字输入框
2017/02/22 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
地理教师岗位职责
2014/03/16 职场文书
消防志愿者活动方案
2014/08/23 职场文书
销售合作意向书范本
2015/05/08 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python