[英]Python: list index out of range when trying to compare two strings at index?
我具有此功能來檢查字符串是否包含三個或更多個小寫字母。
def lowerCaseValid(word):
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
i = 0
flag = 0
while i <= len(word):
j = 0
while j <= len(lowCharList):
if lowCharList[j] == word[i]:
flag += 1
j = 0
else:
j += 1
i += 1
if flag >= 3:
return True
簡單來說,我傳入一個字符串(單詞)並創建一個可接受的字符列表(lowCharList)。
然后,我建立了一個嵌套的while循環,該循環在lowCharList的每個索引處檢查word [i],直到找到匹配項為止。
然后,它重置lowCharList計數器並將1加到標志,然后移至word [i + 1]。
如果在到達z時找不到匹配項,則它將繼續移動到單詞[i + 1]上。
由於某些原因,為什么要在主函數中嘗試輸入示例。
def main():
word = 'corRe!33'
print(lowerCaseValid(word))
我收到此錯誤:
in lowerCaseValid
if lowCharList[j] == word[i]:
IndexError: list index out of range
為什么會引發此錯誤? 謝謝。
使用python的in運算符更容易...
def lowerCaseValid(word):
cnt = 0
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
chars = lowCharList.pop ()
for ch in word:
if ch in chars:
cnt += 1
return cnt >= 3
或僅使用2行代碼
def lowerCaseValid(word):
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
return len(set(lowCharList.pop()) & set(word)) >=3
或一張帶有地圖和lambda的班輪
def lowerCaseValid(word):
return len(list(map(lambda x: x.islower, list(word)))) >=3
使用列表推導和string.ascii_lowercase而不是重新定義小寫字母的另一種替代方法:
from string import ascii_lowercase
def lowerCaseValid(word):
return sum[x in ascii_lowercase for x in word] >= 3
列表的理解是如何遍歷單詞中的每個字母的。 x in ascii_lowercase
的x in ascii_lowercase
將返回布爾值True(1)或False(0),然后對True
sum
更改
lowCharList = ['abcdefghijklmnopqrstuvwxyz']
至
lowCharList = list('abcdefghijklmnopqrstuvwxyz')
我相信這會有所幫助,因為您的列表僅包含1個項目,而這樣,您將創建一個包含24個項目(所有字母均不同)的列表。
正如heemayl在評論中指出的那樣, lowCharList
為1個元素! 現在,您有2個選項:將lowCharList設置為實際列表( lowCharList = list ("abcd...")
),或將lowCharList
保留為字符串,這將正常工作(刪除定義中的括號)。
可能我建議另一種方法:檢查str.islower計數是否總計> = 3。 所以:
lower_count = 0
for letter in word:
if letter.islower(): lower_count += 1
if lower_count >= 3: return True
另外,如評論中所建議:
return len ([letter for letter in word if letter.islower()]) >= 3
會起作用(比我的答案更好,這只是它的擴展形式)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.