我刚刚开始使用Python,刚刚遇到以下问题:
假设我有以下列表:
list = [["Word1","Word2","Word2","Word4566"],["Word2", "Word3", "Word4"], ...]
显示的列和行都是出现的单词(无论哪个列表)。
我想要的是一个程序,可以计算每个列表中单词的出现次数(按列表)。
下图是第一个列表后的结果。
是否有一种简单的方法可以实现类似的目标?
编辑:
基本上我想要一个列表/矩阵来告诉我当单词 1 也在列表中时单词 2-4566 出现了多少次,依此类推。
因此,我会得到每个单词的列表,其中显示与该单词相关的所有其他 4555 个单词的绝对频率。
所以我需要一个算法来迭代所有这些单词列表并构建结果列表
最佳答案
据我了解,您想要创建一个矩阵,显示每对单词中两个单词位于一起的列表数量。
首先我们应该修复唯一单词的集合:
lst = [["Word1","Word2","Word2","Word4566"],["Word2", "Word3", "Word4"], ...] # list is a reserved word in python, don't use it as a name of variables
words = set()
for sublst in lst:
words |= set(sublst)
words = list(words)
其次我们应该定义一个带零的矩阵:
result = [[0] * len(words)] * len(words) # zeros matrix N x N
最后我们通过给定的列表填充矩阵:
for sublst in lst:
sublst = list(set(sublst)) # selecting unique words only
for i in xrange(len(sublst)):
for j in xrange(i + 1, len(sublst)):
index1 = words.index(sublst[i])
index2 = words.index(sublst[j])
result[index1][index2] += 1
result[index2][index1] += 1
print result
关于python - 如何创建频率矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300583/