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 06 Python
python实现socket客户端和服务端简单示例
Feb 24 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python中实现三目运算的方法
Jun 21 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
简单易懂的python环境安装教程
Jul 13 Python
Anaconda入门使用总结
Apr 05 Python
如何使用Python实现自动化水军评论
Jun 26 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
Python __slots__的使用方法
Nov 15 Python
python中round函数保留两位小数的方法
Dec 04 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
Terran剧情介绍
2020/03/14 星际争霸
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
清空上传控件input file的值
2010/07/03 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
初探nodeJS
2017/01/24 NodeJs
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
python数组过滤实现方法
2015/07/27 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
写得不错的求职信范文
2014/07/11 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
Python OpenCV形态学运算示例详解
2022/04/07 Python