我正在编写简单的python代码:
Question:
Given a list of strings, return the count of the number of
# strings where the string length is 2 or more and the first
# and last chars of the string are the same.
我工作的解决方案:
def match_ends(words):
for items in words:
count = 0
los = len(items)
first_char= items[0]
last_char= items[los-1]
if los >=2 and first_char is last_char:
count = count+1
else:
count = count
print count
return
def main():
print 'match_ends'
match_ends(['aba', 'xyz', 'aa', 'x', 'bbb'])
我一直在以1为单位获得答案,我认为它并非完全循环。错误在哪里
答案 0 :(得分:3)
我会使用==
运算符来比较字符而不是is
关键字。此外,您可以使用[-1]
索引从后面切片以获取最后一个字符,而不是基本上执行[len-1]
。您还在每个循环开始时将count
重置为0
(同时count
已经是函数名称,请尽量避免命名具有相同名称的变量)
话虽如此,以下是针对上述内容的可读性和修复方面的一些变化。
def matches(words):
total = 0
for word in words:
if (len(word) > 1) and (word[0] == word[-1]):
total += 1
return total
>>> matches(['aba', 'xyz', 'aa', 'x', 'bbb'])
3
答案 1 :(得分:3)
另一种更简洁的方法就是:
sum(1 for s in words if len(s) > 1 and s[0] == s[-1])
答案 2 :(得分:1)
原因是您需要在行for items in words: