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 20 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
用python获取txt文件中关键字的数量
Dec 24 Python
Django前后端分离csrf token获取方式
Dec 25 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
smarty section简介与用法分析
2008/10/03 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
javascript深入理解js闭包
2010/07/03 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
食品安全责任书范本
2015/05/09 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python