我知道如何计算列表中元素的频率,但这是一个略有不同的问题。我有一套更大的词汇量和一些只使用部分词汇量的列表。使用数字而不是单词作为例子:
vocab=[1,2,3,4,5,6,7]
list1=[1,2,3,4]
list2=[2,3,4,5,6,6,7]
list3=[3,2,4,4,1]
并且我希望在不使用单词时输出保持为“0”:
count1=[1,1,1,1,0,0,0]
count2=[0,1,1,1,1,2,1]
count3=[1,1,1,2,0,0,0]
我想我需要对单词进行排序,但如何保留“0”记录?
答案 0 :(得分:2)
这可以使用列表对象的内置count
函数在列表推导中完成。
>>> vocab = [1, 2, 3, 4, 5, 6, 7]
>>> list1 = [1, 2, 3, 4]
>>> list2 = [2, 3, 4, 5, 6, 6, 7]
>>> list3 = [3, 2, 4, 4, 1]
>>> [list1.count(v) for v in vocab]
[1, 1, 1, 1, 0, 0, 0]
>>> [list2.count(v) for v in vocab]
[0, 1, 1, 1, 1, 2, 1]
>>> [list3.count(v) for v in vocab]
[1, 1, 1, 2, 0, 0, 0]
迭代vocab
中的每个值,累计它们的频率。
答案 1 :(得分:1)
你也可以通过以下方式实现这一点(Python 2):
map(lambda v: list1.count(v), vocab)