使用计数(xs)定义函数

时间:2015-11-08 22:09:38

标签: python

分配

  

计数(XS):   考虑一系列值xs。它可以包含重复项,我们想知道如何   每个现有价值都有很多。构造并返回一个字典,其键是找到的东西   在序列中,其对应的值是计数   事件发生。

     
      
  • XS   ::值序列。 (它可以是列表,字符串或其他东西......)

  •   
  • 返回值:事物字典及其在xs中的出现次数。

  •   
     

示例:

counts([1,1,1,2,3,3,3,3,5])  → {1:  3,  2:  1,  3:  4,  5:  1}
counts("abracadabra") → {'r':   2,  'd':    1,  'c':    1,  'b':    2,  'a':    5}

我尝试过:

def counts(xs):
    for x in xs:
        return {x: xs.count(x)}

counts(xs)

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。最简单的方法是迭代列表一次,为列表中的每个值添加一个计数器。

from collections import defaultdict

def counts(start_list):
    num_dict=defaultdict(int)
    for val in start_list:
        num_dict[val] += 1
    print num_dict
    print

counts([1,1,1,2,3,3,3,3,5])
counts("abracadabra")

答案 1 :(得分:0)

这似乎对我有用,并且与问题中给出的内容非常接近。迭代所有项目后不得不返回(不仅仅是for循环中的第一项)。另外,如果我在列表中有两个位置,我将在字典中添加两次(第二次添加覆盖第一个),但这对我们来说并不重要。它还假设所有可迭代的给定(xs)都有一个要调用的count方法。

def counts(xs):
    d = {}
    for item in xs:
        d[item] = xs.count(item)
    return d 

if __name__== "__main__":
   print counts([1,1,1,2,3,3,3,3,5])
   print counts("abracadabra")