python - 请帮助我理解 Python 代码

标签 python python-2.7

我正在尝试理解以下 python 代码,因为我是新手。

import random

howMany = random.randint(0,1000)
stats = {}
for i in range(howMany):
   value = random.randint(0,500)
   stats.setdefault(value,0)
   stats[value]+=1
for item in stats:
   if stats[item] > 1:
       print item

这是我目前的理解,之后我的问题如下:

  1. howMany 存储在 0 和 1000 之间生成的随机数,包括两者。

  2. stats = {} 声明一个空字典

  3. i 将根据 howMany 的值运行。例如,如果 howMany 是 2,所以 i 将运行两次,值为 01

  4. value 变量存储介于 0500 之间的随机数,包括两者

  5. 我不明白 stats.setdefault(value,0)。例如,value变量的值为4,那么stats.setdefault(4,0)是什么意思?

  6. stats[value]+=1 有什么作用? stats[value]+=1 的扩展形式是 stats[value] = value + 1?

  7. 我理解了以下段落:

    for item in stats:
       if stats[item] > 1:
           print item
    

    stats 字典中打印那些大于 1 的值。如果我在某处有误,请纠正我。

最佳答案

5. dict.setdefault(key, default)这样做:

If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.

因此它确保所有键都以 0 作为关联值开头。

stats.setdefault(value, 0)

因此等同于

if value not in stats:
    stats[value] = 0

6. 不。但是这些是等价的(很好,glglgl):

stats[value] += 1
stats[value] = stats[value] + 1

它们在 stats 中导致两种不同的方法调用(__iadd____setitem__),因此对于某些对象它们确实不同,但在这里他们是等价的。有关这方面的示例,请参阅 Ashwini 的回答中的优秀链接。

7. 此代码打印出出现不止一次的所有值。

在 python 2.7+ 中,您的代码示例最好使用 collections.Counter 编写类:

import random
import collections

howMany = random.randint(0,1000)
stats = collections.Counter(random.randint(0, 500) for i in range(howMany))
for item in stats:
   if stats[item] > 1:
       print item

关于python - 请帮助我理解 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436131/

相关文章:

python - 如何将统一的差异文件应用到原始文件?

python - 将列表中具有特定第一个单词的每个字符串移动到另一个列表

python - 是否有用于根据带索引的向量进行排序的 numpy 函数?

python-2.7 - 从多个摄像头写入视频

python - 在文本文件中查找一个点并在 Python 中向该文件添加一个换行符?

python - 有效地计算numpy数组中的零元素?

python - 使用 PyGame 显示 Sci Py voronoi 边缘会产生奇怪的 "star"效果

python - 按值拆分列表并保留分隔符

python - 将 'curl -F' 转换为 Python 请求

python - __init__() 在 Django Rest Framework 中使用 get 调用时得到一个意外的关键字参数 'context'