簡體   English   中英

這個 for 循環如何在以下字符串上工作?

[英]How does this for loop work on the following string?

我一直在研究 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)

OUTPUT

{'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 等),代碼如何知道通過字符串中的每個字符運行循環?

這不是關於變量的名稱,而是關於這個變量指向的object Python 虛擬機中的循環實現知道如何根據對象的類型對其進行迭代。

something的迭代被實現為對iter(something)的迭代,這又與對something.__iter__() 不同的類實現自己的__iter__版本,以便循環正常工作。

str.__iter__遍歷字符串的單個字符, list.__iter__ - 遍歷列表的元素等等。


您可以創建自己的 object 並對其進行迭代:

class MyClass:
    def __iter__(self):
        return iter([1,2,3,4])

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

這將打印從 1 到 4 的數字。

字符串是 python 中的數組。 所以,這意味着當你循環一個字符串時,你循環每個字符; 在您的情況下,您將已讀取的內容設置為character

然后,如果字符尚未在字典中,則 setdefault 將字符映射到 0。 rest 看起來非常簡單。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM