2013-09-16 155 views
2
my_list=raw_input('Please enter a list of items (separated by comma): ') 
my_list=my_list.split() 
my_list.sort() 

print "List statistics: " 

for x in my_list: 
    z=my_list.count(x) 

    if z>1: 
     print x, "is repeated", z, "time." 
    else: 
     print x, "is repeated", z, "times." 

我想讓程序按字母順序排序列表,然後打印它找到的每一個。輸出是:蟒蛇列表排序

List statistics: 
bird, is repeated 1 time. 
cat, is repeated 1 time. 
dog is repeated 1 time. 
dog, is repeated 2 times. 
dog, is repeated 2 times. 

我只需要它打印一次。此外,我想弄清楚如何把項目放在引號中。

+1

'不帶參數str.split'按空白進行分割,而不是逗號。 – chepner

回答

1

可以遍歷從列表中創建一組:

for x in set(my_list): 
    z = my_list.count(x) 

這樣一來,你只會在循環得到每個元素一次。

0

更換for x in my_list:for x in sorted(list(set(my_list))):

而且雖然在問題還沒問你可以使用這樣的:

print x, "is repeated", z, "time%s." %("s" if z > 1 else "") 

代替:

if z>1: 
    print x, "is repeated", z, "time." 
else: 
    print x, "is repeated", z, "times." 

「Python化」,因爲他們稱呼它。

+0

當我添加第二行時,它只打印列表中的其中一個項目,如「dog」,但它不會打印所有變量bird,cat,dog。謝謝您的幫助! – user2784808

+0

@ user2784808是否在循環中添加了它?壓縮檢查?順便說一句答案更新。 –

3
from itertools import Counter 
my_list=raw_input('Please enter a list of items (separated by comma): ') 
my_list=my_list.split(",") 


print "List statistics: " 
import operator 
for item,count in sorted(Counter(my_list).items(),key =operator.itemgetter(0)) : 

    if z==1: 
     print '"%s" is repeated %d time.'%(item,count) 
    else: 
     print '"%s" is repeated %d times.'%(item,count) 

如果你使用python < 2.7,你可以使自己的計數器法

def Counter(a_list): 
    d = {} 
    for item in a_list: 
     if d.get(item,None) is None: 
      d[item] = 0 
     d[item] += 1 
    return d 
+0

-1:OP提到'我試圖讓程序按字母排序列表'。我想知道,使用COunter,你怎麼能按字母順序打印它。你的程序也有很多語法錯誤。 – Abhijit

+0

對逗號分隔的項目使用'split()'會導致錯誤的結果。 – Matthias

+0

我剛剛複製並粘貼他的代碼分割...我只是添加了計數器部分...無論如何修復拆分和字母順序的東西... –