avi*_*avi 15 python performance numpy list
我有一个包含大约400个单词的列表.另一个列表列表,其中每个列表包含大约150,000个单词.这份清单有20个这样的清单.
现在我想看看这150,000个单词列表中出现的400个单词中有多少个.我也想从这400个单词中知道一个单词,在150k单词列表中出现多少次,这些单词中出现的最多,多少次等等.
我能想到的唯一解决方案是多项式时间解决方案.这是一个非常糟糕的解决方案,并且会很慢:
for one_list in list_of_150kwords:
for key in 400_words:
for word in one_list:
if key == word:
# count this word
# do other stuff
Run Code Online (Sandbox Code Playgroud)
这是一个非常丑陋和糟糕的解决方案,但我想不出更好.我通过将这些列表转换为NumPy数组来尝试使用NumPy:
list_of_150kwords = numpy.array(list_of_150kwords)
...
Run Code Online (Sandbox Code Playgroud)
但我仍觉得它很慢.还有其他方法吗?还是任何图书馆?
Ósc*_*pez 13
这听起来像是一个使用的好机会set:
set_of_150kwords = set(list_of_150kwords)
one_set = set(one_list)
len(one_set & set_of_150kwords) # set intersection is &
=> number of elements common to both sets
Run Code Online (Sandbox Code Playgroud)
由于每套理论,两个集合的交集给出了出现在元素都集,那么它的服用其长度一件简单的事情.对于第二部分(这些单词中出现的最多,多少次等)创建一个Counterwith list_of_150kwords,这将告诉您每个单词出现在列表中的次数.并且交集会告诉您哪些是常用词,解决了您的两个要求.