2016-09-19 111 views
4

我是新來的Python編程,請與我新手的問題,承擔過......計數頻率,巨蟒

我有一個初步名單(列表1),這是我清洗重複和結束(列表2):

list1 = [13,19,13,2,16,6,5,19,20,21,20,13,19,13,16 ],

list2中= [13,19,2,16,6,5,20,21]

我想是計數各值多少次「在利st2「出現在」list1「中,但我無法弄清楚如何做到這一點,而不會出錯。

我找的輸出類似於這樣:

13號表示在列表1 1倍。 ........ 16號在list1中被表示2次。

+0

此信息可能是開始http://stackoverflow.com/questions/2600191/how-can-i-count-the-occurrences-of-a-list-item-in-python的好地方 –

回答

6
visited = [] 
for i in list2: 
    if i not in visited: 
    print "Number", i, "is presented", list1.count(i), "times in list1" 
    visited.append(i) 
7

最簡單的方法是使用計數器:

from collections import Counter 
list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 
c = Counter(list1) 
print(c) 

Counter({2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}) 

這樣你就可以訪問該鍵值對計數器的代表項目和它的出現使用與用於處理字典相同的語法:

for k, v in c.items(): 
    print('- Element {} has {} occurrences'.format(k, v)) 

捐贈:

- Element 16 has 2 occurrences 
- Element 2 has 1 occurrences 
- Element 19 has 3 occurrences 
- Element 20 has 2 occurrences 
- Element 5 has 1 occurrences 
- Element 6 has 1 occurrences 
- Element 13 has 4 occurrences 
- Element 21 has 1 occurrences 
1

最簡單最容易瞭解,沒有魔法的方法是創建一個對象(關聯數組)和僅計算列表1的數字:

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 

frequency_list = {} 

for l in list1: 
    if l in frequency_list: 
     frequency_list[l] += 1 
    else: 
     frequency_list[l] = 1 

print(frequency_list) 

打印出這一點:

{ 
    16: 2, 
    2: 1, 
    19: 3, 
    20: 2, 
    5: 1, 
    6: 1, 
    13: 4, 
    21: 1 
} 

意味着16有兩次,2是有一次......

+0

這個更簡潔的版本是爲'item1 in list1:frequency_list [item] = frequency_list.get(item,0)+ 1'。我不知道你是否認爲這是「神奇的」,但我確實更喜歡它的乾淨的代碼。我想這需要多一點理解,所以也許只是意見的問題:) – roganjosh

+0

@roganjosh:很好。我只是認爲一個新手問題需要一個新手答案;-) –

+1

有趣。 24:25左右,我在[Hettinger](https://www.youtube.com/watch?v=OSGv2VnC0go)看到它後開始使用我的建議。我決定進行測試,並且您的方法始終以合理的幅度加快速度...... – roganjosh

0

您還可以使用運營商

>>> list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16], 
>>> list2 = [13, 19, 2, 16, 6, 5, 20, 21] 

>>> import operator 
>>> for s in list2: 
... print s, 'appearing in :', operator.countOf(list1, s) 
0

在技術方面,list是一個「對象」的「類型」。 Python有一些內置類型,比如字符串(str),整數(int)以及其他一些可以在google上很容易找到的類型。這很重要的原因是每個對象類型都有自己的「方法」。您可以將這些方法看作是完成常見編程任務並使您的生活更輕鬆的功能。

統計列表中出現次數是普通編程任務的一個示例。我們可以用count()方法來完成。例如,計算的時間13號出現在列表1:

count_13 = list1.count(13) 

我們也可以使用一個for循環遍歷整個列表:

for x in list2: 
    print(list1.count(x)) #This is for python version 3 and up 

或超過3老的Python版本:

for x in list2: 
    print list1.count(x) 
0

您不需要刪除重複項。當您添加到字典時,自動將重複項視爲單個值。

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 
counts = {s:list1.count(s) for s in list1} 
print counts 

{2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}