iT邦幫忙

0

Python 計算List中的元素,並取出現次數多的前3名

各位IT高手
小弟我想問,我想取出在X List中的出現次數多的前幾名元素,但寫到這邊就有錯誤訊息
希望能請高手幫忙解答,要如何修改?
謝謝高手

X = [1,5,6,7,8,49],[8,9,12,34,55,30],[6,7,8,9,3,2],[1,8,9,30,55]

from collections import Counter
o = x[:20]
for i in o :
  for j in i :
      n = Counter(j)
      
      TypeError: unhashable type: 'list'

2 個回答

2
PoiBlackTea
iT邦新手 5 級 ‧ 2021-01-30 17:44:23
最佳解答

Counter本身是dict的subclass,使用上必須給一個可以hash的迭代物件。

from collections import Counter

X = [1,5,6,7,8,49],[8,9,12,34,55,30],[6,7,8,9,3,2],[1,8,9,30,55]

element = [j for i in X for j in i]
count_element = Counter(element)
print(count_element.most_common())
ccutmis iT邦高手 4 級 ‧ 2021-01-30 17:53:26 檢舉
print(count_element.most_common(3))
chengwen iT邦新手 5 級 ‧ 2021-01-30 18:04:32 檢舉

謝謝高手,跑出來後會出現下方List,想問我如果只想要左邊的元素,右邊的統計資料不要
[(34, 6), (25, 5), (29, 5), (22, 5), (17, 5), (6, 4), (12, 4), (13, 4), (43, 4), (32, 4)
希望變成
[34,25,29,22,17,6,12,13,43,32]
且希望將一開始題目中,左邊跟右邊的List連續出現2次以上的移出,不要在清單內,該如何寫呢?

result = [i[0] for i in count_element.most_common() if i[1]<2]
print(result)
1
japhenchen
iT邦大師 1 級 ‧ 2021-01-30 17:10:21

這樣才對

X = [[1,5,6,7,8,49],[8,9,12,34,55,30],[6,7,8,9,3,2],[1,8,9,30,55]]

我要發表回答

立即登入回答