我不明白这一点,它会困扰我直到我明白。
此 python 代码计算每个字符出现在 'message' 变量中的次数:
message = 'Some random string of words'
dictionary= {}
for character in message.upper():
dictionary.setdefault(character,0)
dictionary[character] = dictionary[character] + 1
print(dictionary)
Run Code Online (Sandbox Code Playgroud)
如果您多次运行它,您会注意到计数每次都以看似随机的顺序返回。为什么是这样?我认为循环应该每次都从字符串的开头开始,并以一致的顺序返回值……但事实并非如此。是否有随机性的一些元素在setdefault(),print()或upper()方法,这也影响着字符串处理的顺序?
因为两点:
print(hash(message))或什至刚刚这样做,print(hash('c'))您会发现从一次运行到下一次运行也有所不同。因此,由于顺序取决于散列,并且散列从一次运行到下一次运行会发生变化,因此您当然可以获得不同的订单。
另一方面,如果您在同一次运行中重复它,您可能会得到相同的顺序:
message = 'Some random string of words'
for _ in range(10):
dictionary= {}
for character in message:
dictionary.setdefault(character,0)
dictionary[character] = dictionary[character] + 1
print(dictionary)
Run Code Online (Sandbox Code Playgroud)
我刚刚运行了它,正如预期的那样,它总共打印了十次完全相同的订单。然后我再次运行它,它打印了一个不同的订单,但同样十次。正如预期的那样。