Skip to main content
 首页 » 编程设计

python之请帮助我理解 Python 代码

2025年05月04日10del

我正在尝试理解以下 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 将运行两次,值为 0 和 1。

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

  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