今天边肖就给大家分享一个利用组合实现排列组合的Python方法,有很好的参考价值。希望对你有帮助。来和边肖一起看看吧。
好久没写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大的。我是从我长久以来的渴望和一时的脑热开始的。我以为我会多幸福。其实目前最大的感受就是焦虑!担心电动车被偷,担心电瓶被偷,担心路上突然被交警叔叔拦住!我想这种焦虑不会消失,直到我的小腿真的被偷的那一天。唉,要说这样的焦虑是怎么来的,我只能呵呵:)
下面步入正题:
今天,在帮助我们的王波处理专利数据时,我们需要统计专利数据中城市和专利主体之间的合作关系的数量。专利的撰写主题可能涉及两个或两个以上的主题,每个主题属于不同的或相同的城市。统计合作关系的数量,其实就是对主体和城市进行排列组合。Python的itertools库提供了combinations方法,可以轻松实现排列组合。在使用之前,我自己写了一个简单的测试。代码如下:
从itertools导入组合
test_data={'a ',' a ',' a ',' b'}
对于组合中的I(test _ data,2):
打印I
上面的代码执行后输出为:
('甲','乙')
这样的输出结果让我觉得很困惑,我预期的结果是:
(' a ',' a ')
(' a ',' a ')
('甲','乙')
(' a ',' a ')
('甲','乙')
('甲','乙')
同一项专利不会出现主体重复,但主体所在城市会出现重复。如果我用组合来主动忽略排列组合中的重复值,那么我只能自己实现城市的排列组合!自己实现排列组合不难,但是好像不太符合Python的风格。再次阅读测试代码,突然想到自己构造的输入数据是不是有问题。
然后改成了下面这样:
从itertools导入组合
test_data=['a ',' a ',' a ',' b']
对于组合中的I(test _ data,2):
打印I
大括号换成中括号后,输出结果和预期的一模一样!这让我很困惑。首先,是官方文档中对组合方法的介绍,它说:元素是基于它们的位置而不是它们的值被视为惟一的。意思是组合在处理传入的迭代参数时,是根据迭代元素的位置来决定它们是否唯一,与元素的值是否唯一无关。用{}和[]构建的输入数据有什么区别?本来想写这个博客记录问题,等大师解答或者以后自己查。结果我居然一边写一边找到了原因!
其实很简单:大括号{}用来创建集合或者字典,中括号[]用来创建数组,集合互不相同!
所以不管我在{}里写了多少个A,实际上我传递给combinations方法的参数值只有:' A ',' b '。知道了真相,我好尴尬。我以为我遇到了一个很深刻的问题,结果发现我的Python基础知识太欠缺了!发这个博客好尴尬(捂脸)
以上利用组合实现排列组合的Python方法,就是边肖分享的全部内容。希望给大家一个参考,多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。