【问题标题】:How does this for loop work on the following string?这个 for 循环如何在以下字符串上工作?
【发布时间】:2020-06-23 08:55:38
【问题描述】:

我一直在研究 Al Sweighart 的 Automate the Boring Stuff。我正在努力理解下面的代码:

输入

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、pie 等),代码如何知道在字符串中的每个字符中运行循环?

【问题讨论】:

  • strings 的一个属性是遍历它们会依次生成每个字符。正如你所说,这不是命名变量的问题。

标签: python dictionary for-loop


【解决方案1】:

这不是关于变量的名称,而是关于这个变量指向的对象。 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 的数字。

【讨论】:

    【解决方案2】:

    字符串是python中的一个数组。所以,这意味着当你循环一个字符串时,你循环每个字符;在您的情况下,您将已读取的内容设置为 character

    然后,如果字符尚未在字典中,则 setdefault 将字符映射到 0。其余的看起来很简单。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-20
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多