假设我有以下数据:
p1 <- c('a','a','a','a','a','b','b','b','b','c','c')
p2 <- c('b','c','d','e','f','c','a','e','d','e','f')
connections <- data.frame(p1, p2)
Run Code Online (Sandbox Code Playgroud)
在哪里p1和p2在个人和每一行代表一个连接.
问题:如何编写一个函数来查找2个人之间的最大公共连接数?(例如a&b有3个共同连接:c,d,e)
在Python中,您可以使用collection.Counter()对象及其交集:
>>> from collections import Counter
>>> p1_conns = Counter(('a','a','a','a','a','b','b','b','b','c','c'))
>>> p2_conns = Counter(('b','c','d','e','f','c','a','e','d','e','f'))
>>> p1_conns & p2_conns
Counter({'c': 2, 'a': 1, 'b': 1})
>>> sorted(p1_conns & p2_conns)
['a', 'b', 'c']
>>> len(p1_conns & p2_conns)
3
Run Code Online (Sandbox Code Playgroud)
那么长度就是公共连接的数量.如果您只使用集合交叉点,那么最后一个值也可用:
>>> p1_set = {'a','a','a','a','a','b','b','b','b','c','c'}
>>> p2_set = {'b','c','d','e','f','c','a','e','d','e','f'}
>>> p1_set & p2_set
set(['a', 'c', 'b'])
>>> len(p1_set & p2_set)
3
Run Code Online (Sandbox Code Playgroud)
但是计数器(多套)也说明了他们的数量.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |