你好,我是 python 的初學者。我正在構建一個小程式,可以找到字串中的任何重復字符。但是有些事情我不明白。
代碼:
def is_isogram(string):
dict = {}
for letter in string:
dict[letter] = 1
if letter in dict:
dict[letter] = 1
return dict
print(is_isogram("Dermatoglyphics"))
輸出 {'D': 1, 'e': 1, 'r': 1, 'm': 1, 'a': 1, 't': 1, 'o': 1, 'g': 1, 'l': 1, 'y': 1, 'p': 1, 'h': 1, 'i': 1, 'c': 1, 's': 2 }
我設定了一個空字典。然后我使用 for 回圈遍歷字串,然后在每次迭代中它應該將 1 分配給字典鍵“字母”
然后使用“if...in”檢查字母是否已經出現,如果出現則“字母”鍵應遞增 1。
我在一個詞 Dermatoglyphics 上嘗試過,但每次最后一個鍵值對總是 2,即使這個詞每個字母只包含 1。有誰知道為什么?
uj5u.com熱心網友回復:
if陳述句在for回圈結束后應用,因此它只在最后一個字符中加 1。這是縮進的問題。即使你在回圈中寫 if 條件,它也不會因為你的邏輯而正確。你為每個字母分配dict[letter] = 1。然后檢查if letter in dict,這樣它會加 1 兩次。請改用 else 條件。
def is_isogram(string):
dict = {}
for letter in string:
if letter in dict:
dict[letter] = 1
else:
dict[letter] = 1
return dict
print(is_isogram("Dermatoglyphics"))
或者你可以使用count這樣的功能
def is_isogram(string):
dict = {}
for letter in string:
dict[letter] = string.count(letter)
return dict
print(is_isogram("Dermatoglyphics"))
uj5u.com熱心網友回復:
您為每個設定 1,然后遞增最后一個字母。我想你的意思是把if里面的for塊。
這是一個作業版本:
def is_isogram(string):
dct = {}
for letter in string:
if letter in dct:
dct[letter] = 1
else:
dct[letter] = 1
return dct
print(is_isogram("Dermatoglyphics"))
背后的邏輯:如果字母已經存在,則遞增計數器。否則用 counter=1 初始化它。
編輯:更改dict為dctas dictis a python built-in name 正如@Michael 建議的那樣。
uj5u.com熱心網友回復:
當你的函式被命名is_isogram()時,它應該回傳一個布林值。該字串要么是等值線圖,要么不是。一個很大的好處是一旦找到重復項就停止迭代。
您不需要使用dict. 這不是一個壞主意,但要檢測等值線圖,您不需要計算每個字母的出現次數。你只需要測驗成員資格。Aset比較合適。像字典但沒有值。
def is_isogram(word: str) -> bool:
used_letters = set()
for letter in word:
if letter in used_letters:
return False
else:
used_letters.add(letter)
return True
is_isogram("Dermatoglyphics") # True
is_isogram("DDermatoglyphics") # False
uj5u.com熱心網友回復:
您的代碼完全按照預期作業,它為每個字母分配 1,然后由于您的 if 條件不在回圈中,它將最后一個字符(字母)遞增 1。
我對您的代碼進行了一些更改。
def is_isogram(string):
dict = {}
for letter in string:
dict[letter] = 0
for letter in string:
dict[letter] = 1
return dict
print(is_isogram("telegram"))
我所做的是,首先它將所有字母添加到字典中,然后使用另一個掃描來計算每個字母。
這個函式的復雜度為 O(n),比我認為的其他答案要快
這是兩者的定時執行
此答案:https
://onlinegdb.com/lMC-Qn76D
其他答案:https ://onlinegdb.com/eeV0IFN5J
如果我錯了請糾正我
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535001.html
標籤:Python字典
上一篇:用字典元素填充熊貓資料框
