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之使用Python查询更新数据库
Nov 25 Python
Python Queue模块详细介绍及实例
Dec 27 Python
一张图带我们入门Python基础教程
Feb 05 Python
python制作小说爬虫实录
Aug 14 Python
Python面向对象之类和对象实例详解
Dec 10 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
ubuntu上安装python的实例方法
Sep 30 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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调用三种数据库的方法(1)
2006/10/09 PHP
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
python把1变成01的步骤总结
2019/02/27 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
python实现mean-shift聚类算法
2020/06/10 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
python中_del_还原数据的方法
2020/12/09 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
万年牢教学反思
2014/02/15 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
小学生期末评语大全
2014/04/21 职场文书
芙蓉镇观后感
2015/06/10 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP