Python使用combinations实现排列组合的方法

 更新时间:2018年11月13日 11:36:05   作者:肖老板  
今天小编就为大家分享一篇Python使用combinations实现排列组合的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

好久没有写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大,心仪已久加上一时脑热就入手了。以为会有多么开心,其实目前最大的感受就是焦虑!担心电动车被偷,担心电池被偷,担心路上突然被交警叔叔拦下!我想,直到我的小牛真的被偷的那天,这种焦虑才会随之消失。唉,要说这样的焦虑怎么来的,我只能呵呵了:)

下面步入正题:

今天在帮我们家王博处理专利数据的时候,需要对专利数据中的城市和专利主体的合作关系数量进行统计。一项专利其写作主体可能由两个或两个以上主体参与,各个主体又分属不同或者相同的城市,对其合作关系数量进行统计,其实就是对主体及城市进行排列组合。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中的pprint模块

    Python中的pprint模块

    本文介绍了 Python中的pprint模块,pprint模块包含一个“美观打印机”,用于生成数据结构的一个美观的视图。格式化工具会生成数据结构的一些表示,不仅能够由解释器正确地解析,还便于人阅读。输出会尽可能放在一行上,分解为多行时会缩进,想了解具体内容请参考下文
    2021-11-11
  • Numpy与Pytorch 矩阵操作方式

    Numpy与Pytorch 矩阵操作方式

    今天小编就为大家分享一篇Numpy与Pytorch 矩阵操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • PyCharm专业最新版2019.1安装步骤(含激活码)

    PyCharm专业最新版2019.1安装步骤(含激活码)

    这篇文章主要介绍了PyCharm专业最新版2019.1安装步骤(含激活码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python调用支付宝支付接口流程

    python调用支付宝支付接口流程

    这篇文章主要介绍了python调用支付宝支付接口流程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python 字符串追加实例

    python 字符串追加实例

    今天小编就为大家分享一篇python 字符串追加实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python JSON常用编解码方法代码实例

    Python JSON常用编解码方法代码实例

    这篇文章主要介绍了Python JSON常用编解码方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 解决django的template中如果无法引用MEDIA_URL问题

    解决django的template中如果无法引用MEDIA_URL问题

    这篇文章主要介绍了解决django的template中如果无法引用MEDIA_URL问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Django发送邮件和itsdangerous模块的配合使用解析

    Django发送邮件和itsdangerous模块的配合使用解析

    这篇文章主要介绍了Django发送邮件和itsdangerous模块的配合使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python 根据正则表达式提取指定的内容实例详解

    python 根据正则表达式提取指定的内容实例详解

    这篇文章主要介绍了python 根据正则表达式提取指定的内容实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • pytorch训练imagenet分类的方法

    pytorch训练imagenet分类的方法

    今天小编就为大家分享一篇pytorch训练imagenet分类的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论