我正在嘗試生成一個函式,它告訴我一個詞是否是等值線(包含重復值)。但是,此代碼始終回傳一個生成器物件。
def is_isogram(string):
return (True if (string.lower().count(letter) == 1) else False for letter in string.lower())
我知道如何解決這個問題,我只是想知道我的代碼有什么問題。
uj5u.com熱心網友回復:
我想您的函式旨在回傳一個布林值,但是該return陳述句發生了迭代,其中每個值都映射到一個布林值。括號為您提供了這些布林值的迭代器。該函式的描述表明該函式應True在輸入有重復字母時回傳,但映射True在字母不重復時給出。所以你有三個問題:
- 迭代器
- 多個布林值,當你想要一個布林值時
- 布林值表示您要回傳的內容的倒數
所以你對演算法的想法應該改為:
def is_isogram(string):
return any(letter for letter in string.lower() if string.lower().count(letter) > 1)
旁注:此演算法效率不高。更高效的是創建一個集合:
def is_isogram(string):
return len(set(string.lower())) < len(string)
uj5u.com熱心網友回復:
通過將回傳值包裝到括號中,您已經創建了一個生成器運算式,請查看https://peps.python.org/pep-0289/了解詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491719.html
上一篇:在Javascript中單擊提交后如何獲取動態表單值?
下一篇:Springboot-org.postgresql.util.PSQLException:致命:用戶“postgres”的密碼驗證失敗
