简化计数并附加到列表中

时间:2013-08-14 04:52:33

标签: python-3.x

好的,必须有一个更清洁的方法来做到这一点。我仍然是业余程序员,但我觉得他们有一些东西可以缩短这一点。所以基本上我有这个数字数据集,并且我将1,2,3,4,5,6,7,8,9的出现计为第一个数字,然后将计数附加到列表中。这肯定似乎很长,我必须这样做

countList = []
for elm in pop_num:
    s = str(elm)
    if (s[0] == '1'):
      count1 += 1 
    if (s[0] == '2'):
      count2 += 1
    if (s[0] == '3'):
      count3 += 1
    if (s[0] == '4'):
      count4 += 1
    if (s[0] == '5'):
      count5 += 1
    if (s[0] == '6'):
      count6 += 1
    if (s[0] == '7'):
      count7 += 1
    if (s[0] == '8'):
      count8 += 1
    if (s[0] == '9'):
      count9 += 1
  countList.append(count1)
  countList.append(count2)
  countList.append(count3)
  countList.append(count4)
  countList.append(count5)
  countList.append(count6)
  countList.append(count7)
  countList.append(count8)
  countList.append(count9)

1 个答案:

答案 0 :(得分:2)

你可以使用collections.Counter(基本上是一个专门用于计算事物的特殊字典)和列表推导(用于编写简单循环的更简洁的语法)在两行中执行此操作。

我是这样做的。

import collections

counts = collections.Counter(str(x)[0] for x in pop_num)
countList = [counts[str(i)] for i in range(1,10)]

编辑:以下是如何在不使用collections的情况下获得等效功能。

counts = {}
for x in pop_num:
    k = str(x)[0]
    counts.setdefault(k, 0)
    counts[k] += 1

countList = [counts[str(i)] for i in range(1,10)]