我下载了Google的Python练习,这是问题之一:
给定一个字符串列表,返回字符串长度为2或更大且字符串的第一个和最后一个字符相同的字符串数的计数
我对此的回答如下:
def match_ends(words): a=[] for word in words: if len(word)>=2 and word[0]==word[-1]: a=a.append(word) return len(a)
但是,对于此列表:
words=['aba', 'xyz', 'aa', 'x', 'bbb']
它只返回“ 1”。我不明白,为什么append
在转弯时不添加所有与之匹配的字符串。
这是Google的解决方案:
def match_ends(words): count = 0 for word in words: if len(word) >= 2 and word[0] == word[-1]: count = count + 1 return count
Willem Van O.. 5
这里有两个问题:
缩进问题:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a = a.append(word) 返回len(a)
该return
语句放置在for
循环中,这意味着仅重复一遍,您将返回一个答案(零或一)。因此您可以像这样解决此问题:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a = a.append(word) 返回len(a)
此外,您将的结果分配a.append(word)
给a
。.append
然而收益None
(实际上.append
不返回任何东西,所以Python让它自动返回None
),所以下一个迭代,a
是不是list
再和程序就会崩溃。因此,替换a = a.append(word)
为a.append(word)
:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a.append(word) 返回len(a)
现在您的程序将运行。但是,存储所有匹配的单词是没有用的,因为您只想对它们进行计数。如果找到匹配项,最好使用一个计数器并递增该计数器,因为这不需要额外的内存。Google的答案因此更加有效。
这里有两个问题:
缩进问题:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a = a.append(word) 返回len(a)
该return
语句放置在for
循环中,这意味着仅重复一遍,您将返回一个答案(零或一)。因此您可以像这样解决此问题:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a = a.append(word) 返回len(a)
此外,您将的结果分配a.append(word)
给a
。.append
然而收益None
(实际上.append
不返回任何东西,所以Python让它自动返回None
),所以下一个迭代,a
是不是list
再和程序就会崩溃。因此,替换a = a.append(word)
为a.append(word)
:
def match_ends(words): a = [] 逐字逐句: 如果len(word)> = 2且word [0] == word [-1]: a.append(word) 返回len(a)
现在您的程序将运行。但是,存储所有匹配的单词是没有用的,因为您只想对它们进行计数。如果找到匹配项,最好使用一个计数器并递增该计数器,因为这不需要额外的内存。Google的答案因此更加有效。