我一直在通过自动化的无聊的东西阿尔斯威加特。我很难理解下面的代码:
输入
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
count = {}
for character in message:
count.setdefault(character, 0)
count[character] = count[character] + 1
print(count)输出
{'I': 1, 't': 6, ' ': 13, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'i': 6, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 5, 'k': 2, '.': 1}问题
因为在for循环中调用什么变量并不重要(例如,字符可以更改为x、饼等等),那么代码如何知道如何在字符串中的每个字符中运行循环?
发布于 2020-06-23 09:05:31
它不是关于变量的名称,而是关于这个变量指向的对象。Python虚拟机中的循环实现知道如何根据对象的类型迭代对象。
对something的迭代被实现为对iter(something)的迭代,这反过来又与something.__iter__()上的迭代相同。不同的类实现自己版本的__iter__,这样循环就可以正常工作。
str.__iter__迭代字符串的单个字符,在列表的元素上迭代list.__iter__ -等等。
您可以创建自己的对象并对其进行迭代:
class MyClass:
def __iter__(self):
return iter([1,2,3,4])
my_object = MyClass()
for x in my_object:
print(x)这将打印从1到4的数字。
发布于 2020-06-23 09:00:51
字符串是python中的数组。因此,这意味着当您在字符串上循环时,您对每个字符进行循环;在您的示例中,您设置了已读取到character的内容。
然后,如果dict中还没有字符,则设置默认值将字符映射为0。剩下的看起来很简单。
发布于 2020-06-23 09:00:41
python中的字符串是chars:https://docs.python.org/3/library/stdtypes.html#textseq的序列。因此,for c in m:行迭代m序列的每个元素,即字符串的每个字符。
https://stackoverflow.com/questions/62530953
复制相似问题