首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于下面的字符串,这个for循环如何工作?

对于下面的字符串,这个for循环如何工作?
EN

Stack Overflow用户
提问于 2020-06-23 08:55:38
回答 3查看 54关注 0票数 2

我一直在通过自动化的无聊的东西阿尔斯威加特。我很难理解下面的代码:

输入

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
{'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、饼等等),那么代码如何知道如何在字符串中的每个字符中运行循环?

EN

回答 3

Stack Overflow用户

发布于 2020-06-23 09:05:31

它不是关于变量的名称,而是关于这个变量指向的对象。Python虚拟机中的循环实现知道如何根据对象的类型迭代对象。

something的迭代被实现为对iter(something)的迭代,这反过来又与something.__iter__()上的迭代相同。不同的类实现自己版本的__iter__,这样循环就可以正常工作。

str.__iter__迭代字符串的单个字符,在列表的元素上迭代list.__iter__ -等等。

您可以创建自己的对象并对其进行迭代:

代码语言:javascript
复制
class MyClass:
    def __iter__(self):
        return iter([1,2,3,4])

my_object = MyClass()
for x in my_object:
    print(x)

这将打印从1到4的数字。

票数 3
EN

Stack Overflow用户

发布于 2020-06-23 09:00:51

字符串是python中的数组。因此,这意味着当您在字符串上循环时,您对每个字符进行循环;在您的示例中,您设置了已读取到character的内容。

然后,如果dict中还没有字符,则设置默认值将字符映射为0。剩下的看起来很简单。

票数 2
EN

Stack Overflow用户

发布于 2020-06-23 09:00:41

python中的字符串是chars:https://docs.python.org/3/library/stdtypes.html#textseq的序列。因此,for c in m:行迭代m序列的每个元素,即字符串的每个字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62530953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档