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的setuptools框架下生成egg的教程
Apr 13 Python
Python实现统计单词出现的个数
May 28 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
Sanic框架安装与简单入门示例
Jul 16 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
python网络编程之五子棋游戏
May 14 Python
Python列表如何更新值
May 27 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
python制作抽奖程序代码详解
Jan 15 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分页函数
2016/07/20 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Python SQLite3简介
2018/02/22 Python
python如何爬取个性签名
2018/06/19 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
高中历史教学反思
2014/02/08 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
党员十八大心得体会
2014/09/12 职场文书
滴水洞导游词
2015/02/10 职场文书
党员违纪检讨书
2015/05/05 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
JavaScript组合继承详解
2021/11/07 Javascript
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server