Python 3.x 简化计数和添加到列表中

Python 3.x 简化计数和添加到列表中,python-3.x,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,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)

你可以用两行代码来完成这项工作:collections.Counter(基本上是一种专门为计数而设计的dict)和list comprehension(一种更简洁的语法,用于编写简单循环)

我会这样做的

import collections

counts = collections.Counter(str(x)[0] for x in pop_num)
countList = [counts[str(i)] for i in range(1,10)]
编辑:下面介绍如何在不使用
集合的情况下获得等效功能

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)]

嗯,我明白了,有没有一种方法可以在不导入任何其他函数的情况下执行此操作?@Suliman您有什么理由需要避免使用collections模块吗?你可以自己重新实现,但这只会导致更多的样板代码。我没有理由感到好奇,因为在此之前我不知道collections函数。因此,如果出现更多类似这样的问题,我不知道是否存在用于这类事情的模块,我可以想出一些小技巧来缩短它,如果这有任何意义的话,我发布了一个例子,说明了如何在没有任何模块的情况下做同样的事情,但实际上这只是重新发明轮子,因为你通常会使用集合来做这类事情。另外,
collections
itertools
是您应该熟悉的两个常用实用程序模块。将来您可能需要再次使用它们。@SulimanSharif“想出一些小技巧来缩短它”——使用内置库。这是一条最短的路,涉及的技巧最少;这是学习语言的最好方法。