实际上,我有一个关于“会议”的数据集。 例如,A,B,C有会议,那么列表将是[A,B,C]。 像这样,每个列表都包含参加会议的成员列表。 因此:
line1 =(A,B,C)
第2行=(A,C,D,E)
line3 =(D,F,G)
...
我只想计算每对成员相遇的次数。 例如,成员A从line1和line2遇到C两次,成员B从line1遇到C一次。所以,我想制作一个这样的图表..
A B C D E F G...
A . 1 2 1 ...
B 1 . 1 0
C
...
我认为一开始会很容易,但我很困惑。 请帮助我,并提前感谢你。
答案 0 :(得分:7)
不是手动汇总频率,而是使用collections.counter
和itertools
:
from collections import Counter
from itertools import chain, combinations
meets = Counter(chain.from_iterable(combinations(line, 2) for line in lines))
其中lines
是可迭代的名称迭代。
答案 1 :(得分:0)
这是一个非常简单的数据结构问题,带有2D数组或字典。如果你有很多人,阵列会更有效率,但我会假设你没有。
times_met = defaultdict(int)
for line in lines:
for pair in itertools.combinations(line, 2)
times_met[pair] += 1
# How many times person a meets person b is described by the following (s.t. a < b)
print times_met[(a, b)]
请注意,如果您举行大型会议并且可能存在更高效的算法,则效率非常低。
答案 2 :(得分:0)
看起来你应该能够通过添加矩阵来解决这个问题。如果您知道总人数(问题中的G),那么您的答案将是GxG矩阵。使用line1的组合创建GxG矩阵,然后使用line2等组合添加GxG矩阵。