【问题标题】:How to create an array of 10 digits for counting repetitions?如何创建一个包含 10 位数字的数组来计算重复次数?
【发布时间】:2011-12-13 13:19:42
【问题描述】:

我想知道如何创建一个 10 位数字的数组,这样每次显示一个数字的数字时,它会增加其在 10 位数字数组中的匹配位置,如下所示:

digits=[0,0,0,0,0,0,0,0,0,0]
num_digits=[1,2,3,9,1]

数字变成:

digits=[0,2,1,1,0,0,0,0,0,1]

我试过了:

digits[num_digits[j]]=digits[num_digits[j]]+1

(j 在 num_digits 元素上倒退) 但我收到错误“列表索引必须是整数,而不是列表”。

提前致谢!

【问题讨论】:

  • 似乎j 不知何故是一个列表,而不是一个整数。显示定义j的代码。
  • 有了jthere is no error的这个定义。
  • defaultdict 和 Counter 是解决这个问题的方法。
  • @PaulMcGuire:我不同意。 Progo's answer 简洁、易读并且比涉及defaultdictCounter 的任何解决方案都快得多。后者也有优势,但根据问题中给出的信息,无法断定它们是“可行的方法”。
  • @SvenMarnach:好吧,我同意你的一半。我对这里的许多“我试图保持 x 在 y 中的计数”问题中的任何一个的下意识的反应是 defaultdict 或 Counter。在这种特殊情况下,值本身作为列表索引值(值 0-9)干净地工作,并且已知它们的数量很少(10),然后使用 0 的列表并按值保持计数很快和简单。

标签: python arrays list flags digits


【解决方案1】:
>>> digits=[0,0,0,0,0,0,0,0,0,0]
>>> num_digits=[1,2,3,9,1]
>>> for d in num_digits:
...     digits[d] += 1
... 
>>> digits
[0, 2, 1, 1, 0, 0, 0, 0, 0, 1]

对于列表的简单迭代,我们不需要变量 j

【讨论】:

    【解决方案2】:

    可能值得使用dict 而不是list 来存储您的总数。然后,您可以使用defaultdict from collections 创建一个dict,它将自动为新密钥创建一个int 为零的条目:

    >>> from collections import defaultdict
    >>> digits = defaultdict(int)
    >>> num_digits = [1,2,3,9,1]
    >>> for d in num_digits:
    ...     digits[d] += 1
    ... 
    >>> digits
    defaultdict(<type 'int'>, {1: 2, 2: 1, 3: 1, 9: 1})
    >>> digits[1]
    2
    >>> digits[8]
    0
    

    【讨论】:

    • 我绝对推荐使用字典而不是列表
    【解决方案3】:

    您可以使用collections.Counter 执行该任务,如下所示:

    from collections import Counter
    
    num_digits=[1,2,3,9,1]
    digits = [0]*10
    for key, value in Counter(num_digits).items():
        digits[key] = value
    

    【讨论】:

      【解决方案4】:

      您可以在这里找到如何在 python 中实现计数排序:http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Counting_sort#Python

      【讨论】:

      • 不仅问题中的示例输出与计数排序的结果不匹配,您还提供了外部链接而不是问题的答案。
      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多