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常用内置函数总结
Feb 08 Python
python 默认参数问题的陷阱
Feb 29 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
Python Excel处理库openpyxl使用详解
May 09 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
Python find()、rfind()方法及作用
Dec 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面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python图书管理系统
2020/04/05 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
小学优秀辅导员事迹材料
2014/05/11 职场文书
庆七一宣传标语
2014/10/08 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
早安问候语大全
2015/11/10 职场文书
汽车销售合同文本
2019/08/08 职场文书