根据频率过滤列表中的标记
Filter tokens in a list based on frequency
我正在处理一个包含多个不同频率标记的列表对象
from collections import Counter
s = {'book',
'car',
'bird',
'cup',
'book',
'cup',
'river'}
print(Counter(s))
[('book': 2), ('cup': 2), ('river': 1), ('car': 1), ('bird': 1)]
我想设置一个过滤器,只选择出现两次的标记,我在当前尝试中使用以下代码
select = [word for word in s if list(s).count(word) >= 2]
select
我认为它很简单,但我没有得到任何输出'select.'我的代码出了什么问题以及如何处理它?
如果 s
是一个 list 而不是一个集合(就像你在问题中写的那样,但不是在你的示例中的代码中),你可以使用Counter
对象的 most_common
函数获取列表中的前 X 个元素:
In [67]: s = ['book',
...: 'car',
...: 'bird',
...: 'cup',
...: 'book',
...: 'cup',
...: 'river']
In [68]: s
Out[68]: ['book', 'car', 'bird', 'cup', 'book', 'cup', 'river']
In [69]: c = Counter(s)
In [70]: c.most_common(2)
Out[70]: [('book', 2), ('cup', 2)]
如果您想获取出现次数超过 Y 次的元素,您可以使用:
In [71]: [x[0] for x in c.items() if x[1] >= 2]
Out[71]: ['book', 'cup']
x[0]
是项目(来自列表),x[1]
是频率
我正在处理一个包含多个不同频率标记的列表对象
from collections import Counter
s = {'book',
'car',
'bird',
'cup',
'book',
'cup',
'river'}
print(Counter(s))
[('book': 2), ('cup': 2), ('river': 1), ('car': 1), ('bird': 1)]
我想设置一个过滤器,只选择出现两次的标记,我在当前尝试中使用以下代码
select = [word for word in s if list(s).count(word) >= 2]
select
我认为它很简单,但我没有得到任何输出'select.'我的代码出了什么问题以及如何处理它?
如果 s
是一个 list 而不是一个集合(就像你在问题中写的那样,但不是在你的示例中的代码中),你可以使用Counter
对象的 most_common
函数获取列表中的前 X 个元素:
In [67]: s = ['book',
...: 'car',
...: 'bird',
...: 'cup',
...: 'book',
...: 'cup',
...: 'river']
In [68]: s
Out[68]: ['book', 'car', 'bird', 'cup', 'book', 'cup', 'river']
In [69]: c = Counter(s)
In [70]: c.most_common(2)
Out[70]: [('book', 2), ('cup', 2)]
如果您想获取出现次数超过 Y 次的元素,您可以使用:
In [71]: [x[0] for x in c.items() if x[1] >= 2]
Out[71]: ['book', 'cup']
x[0]
是项目(来自列表),x[1]
是频率