我正在尝试理解以下 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
这是我目前的理解,之后我的问题如下:
howMany
存储在 0 和 1000 之间生成的随机数,包括两者。stats = {}
声明一个空字典i
将根据howMany
的值运行。例如,如果howMany
是 2,所以i
将运行两次,值为0
和1
。value
变量存储介于0
和500
之间的随机数,包括两者我不明白
stats.setdefault(value,0)
。例如,value
变量的值为4
,那么stats.setdefault(4,0)
是什么意思?stats[value]+=1
有什么作用?stats[value]+=1
的扩展形式是stats[value] = value + 1
?我理解了以下段落:
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/