![](/img/trans.png)
[英]How do I calculate PSD, Median Frequency and Mean Frequency in python?
[英]How to calculate the frequency of this python list?
我有一個像這樣的python列表:
base_list (About 3,000,000 sub lists):
[
['Hello','World','Lucy','Lily'],
['Hello','Smith','Simpson','Bart'],
....
]
現在我得到一個小清單:
small_list:
['Hello','World']
現在,我需要找出small_list在base_list中出現多少次。
出現表示:[1,3]出現在[1,2,3,4,5]中。
更新
我已經試過了:
1.將base_list更改為set列表。
2.然后,也將small_list更改為一個集合:
def get_original_freq(self, actors):
count = 0
s = set(actors)
for row in self.orignal_rows:
if s.issubset(row):
count += 1
return count
但是代碼運行速度非常慢,每秒大約檢查1000條記錄。
我的第一個反應是回答一個愚蠢的答案(盡管可行):
def sublistCount(listA, listB):
if not len(listB):
return 0
conditions = ["%s in a" % repr(b) for b in listB]
comprehension = '[a for a in listA if %s]' % ' and '.join(conditions)
return len(eval(comprehension))
其中listA是列表的列表,listB是子列表。
即使使用字符串列表,這實際上也非常快。 我在大約1-2秒內瀏覽了3,000,000個字符串列表。
我之所以稱其為愚蠢是因為它使用eval()函數動態創建代碼。 如果您不確定輸入的內容,則可能有潛在的危險。 這個解決方案是可能解決方案的樂團中的佼佼者:它很有趣,很奏效,但只有一個不好的音符或吱吱聲會使一切變糟。
但是,我最喜歡的潛在解決方案是:
def sublistCount(listA, listB):
b = set(listB)
matches = [a for a in listA if b.issubset(a)]
return len(matches)
這樣更安全,更清潔,並且性能幾乎與第一個解決方案(用於3,000,000條記錄)一樣好。
我發現反向索引可以幫助我:
1.使base_list成為反向索引:
{
'Hello': [1,5,10,8000]
'World': [1,2,3,5,9]
...
}
2.當我需要計算['Hello','World']的出現次數時。 我只是找到它們的兩個倒排索引並計算它們的通用文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.