Python使用组合实现了数组组合,久违地写了博客! 昨天,小牛在上海举行了牛友见面会,现场优惠还很大,心仪已久的脑热得手。 不管多么开心,其实目前最大的心情是不安! 担心电动车被偷,担心电池被偷,担心路上突然被交警qxdjm拦住! 我想在我的小牛真的被偷之前,这种不安是不会消失的。 啊,要说这种焦急是怎么来的,我只能说是少数(: )
接下来进入正题:
今天,在处理我们家醉酒熏天的长筒袜专利数据时,需要统计专利数据中城市与专利主体的合作系数。 一项专利是写作主体可能由两个以上的主体参与,各主体属于不同或相同的城市,统计其合作关系的数量是主体与城市的并列组合。 Python的itertools库提供了组合方法,可以方便地实现数组组合。 在使用之前我自己写了一个简单的测试。 代码如下。
fromitertoolsimportcombinationstest _ data={ ' a '、' a '、' a '、' b ' } foriincombinations (test _ data,2 ) 3365292;
(a )、(b ) )这样的输出令人困惑,但我预想的结果如下。
与(a )、(a )、(a )、(a )、(b )、(a )、(a )、(b )、(b )、(a )、(a )、(b )相同专利中的主体不会重复,但如果有主体,则也难以自己实现排列的组合重读测试代码,突然觉得自己制作的输入数据是不是有问题。 然后修改为:
fromitertoolsimportcombinationstest _ data=[ ' a '、' a '、' a '、' b ' ] foriincombinations (test _ data,2 ) 3365292; 首先,combinations方法是由combinations传递的,在elementsaretreatedasuniquebasedontheirposition,not on their value .中我本来想写这个博客记录问题,但是等机灵的大地解答,或者我自己日后来验证一下,结果一边写一边整理思路,竟然被我找到了原因。
其实很简单。使用大括号{}创建的是集合或者字典,使用中括号[]创建的是数组,而集合具有互异性!
所以,无论{}中写了多少个a,实际上我传递给combinations方法的参数的值只有' a ',' b '。 知道真相的我感到很尴尬。 我还以为遇到了多么深的问题,只是缺乏我的Python的基础知识。 我不好意思发出这个博客。