Python:在索引处比较两个字符串时,是否列出索引超出范围?

Python:在索引处比较两个字符串时,是否列出索引超出范围?,python,string,Python,String,我有这个函数来检查一个字符串是否包含三个或更多的小写字母 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

我有这个函数来检查一个字符串是否包含三个或更多的小写字母

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
我得到这个错误:

in lowerCaseValid
if lowCharList[j] == word[i]:
IndexError: list index out of range
为什么会抛出这个错误?谢谢。

换衣服

lowCharList = ['abcdefghijklmnopqrstuvwxyz']


我相信这会有所帮助,因为您的列表只包含1个项目,而通过这种方式,您可以创建一个包含24个项目(所有不同字母)的列表。

正如heemayl在评论中指出的那样,
lowCharList
是1个元素长!现在您有两个选项:将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 
会有效(比我的答案更好,我的答案只是它的扩展形式)

使用python的in运算符更容易

或者只使用两行代码集

或者一条有地图和lambda的班轮


使用列表理解和string.ascii_小写而不是重新定义小写字母的另一种替代方法:

from string import ascii_lowercase

def lowerCaseValid(word):
    return sum[x in ascii_lowercase for x in word] >= 3

这是如何工作的,列表理解通过单词中的每个字母来完成的。ascii字母小写的
x将返回True(1)或False(0)的布尔值,然后
sum
True
s

lowCharList
是一个元素列表。如何
返回len(如果i.islower(),则i代表word中的i)>=3
?(未测试)对于您的问题,它为什么会抛出错误,您的while j循环用于1个过多的项目,因为字符串或列表的索引为零。即Len('abcde')=5,但最后一个项目位于索引4,所以
return len ([letter for letter in word if letter.islower()]) >= 3 
    def lowerCaseValid(word):
       cnt = 0
       lowCharList = ['abcdefghijklmnopqrstuvwxyz']
       chars = lowCharList.pop ()
       for ch in word:
           if ch in chars:
           cnt += 1

       return  cnt >= 3
def lowerCaseValid(word):

    lowCharList = ['abcdefghijklmnopqrstuvwxyz']

    return len(set(lowCharList.pop()) & set(word)) >=3
def lowerCaseValid(word):

    return len(list(map(lambda x: x.islower, list(word)))) >=3
from string import ascii_lowercase

def lowerCaseValid(word):
    return sum[x in ascii_lowercase for x in word] >= 3