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操作列表之List.insert()方法的使用
May 20 Python
浅谈五大Python Web框架
Mar 20 Python
详解python中的线程
Feb 10 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
Python爬虫学习之翻译小程序
Jul 30 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
python把一个字符串切开的实例方法
Sep 27 Python
Python中基础数据类型 set集合知识点总结
Aug 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
Sony CFR 320 修复改造
2020/03/14 无线电
同时提取多条新闻中的文本一例
2006/10/09 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
javascript实用方法总结
2015/02/06 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
使用Python神器对付12306变态验证码
2016/01/05 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python实现彩色图转换成灰度图
2019/01/15 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
如何用Python 加密文件
2020/09/10 Python
python pillow库的基础使用教程
2021/01/13 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
生日邀请函范文
2014/01/13 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
党组织公开承诺书
2014/03/29 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
离婚案件被告代理词
2015/05/23 职场文书
实践论读书笔记
2015/06/29 职场文书