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编程中的反模式实例分析
Dec 08 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
详解Python sys.argv使用方法
May 10 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
Python数据库小程序源代码
Sep 15 Python
python生成requirements.txt的两种方法
Sep 18 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
Python集合操作方法详解
Feb 09 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
基于Python 函数和方法的区别说明
Mar 24 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 zend 相对路径问题
2009/01/12 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python设置值及NaN值处理方法
2018/07/03 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Ajax和javascript的区别
2013/07/20 面试题
应聘自荐书
2013/10/08 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
大专护理专业自荐信
2015/03/25 职场文书
2016新年年会主持词
2015/07/06 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS