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是编译运行的验证方法
Jan 30 Python
Python的randrange()方法使用教程
May 15 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
python实现k-means聚类算法
Feb 23 Python
Python实现按中文排序的方法示例
Apr 25 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
Python time库的时间时钟处理
May 02 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
Python实现读取并保存文件的类
2017/05/11 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
解决python 输出是省略号的问题
2018/04/19 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
python进程和线程用法知识点总结
2019/05/28 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
护士的自我鉴定
2014/02/07 职场文书
公司司机岗位职责
2014/02/07 职场文书
药店主任岗位责任制
2014/02/10 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
鸡毛信观后感
2015/06/11 职场文书
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers