python练习的切片和范围

时间:2020-07-27 22:10:06

标签: python

我是Python的初学者,如果我有疑问,将不胜感激。 因此,我在一个网站中找到了此练习:返回给定字符串中出现的子字符串“ Emma”的总数。给出的字符串是“ Emma是优秀的开发人员。艾玛是一位作家”。但是我不完全了解解决方案。 解决方案:

def count_emma(statement):
    print("Given String: ", statement)
    count = 0
    for i in range(len(statement) - 1):
        count += statement[i: i + 4] == 'Emma'
    return count

count = count_emma("Emma is good developer. Emma is a writer")
print("Emma appeared ", count, "times")

在-1中的确切含义是什么

range(len(statement)-1):

其中的[i:i + 4]是什么意思

count += statement[i: i + 4] == 'Emma'

3 个答案:

答案 0 :(得分:1)

range(len(statement)-1)的意思是将每个数字从0循环到语句的长度-1。此解决方案不必考虑最后一个元素,因为在最后一个元素*之后的语句中有零个字符。 > 如果语句的4个字符从i开始切到i + 4(不包括i),则

count += statement[i: i+4] == 'Emma'会将count递增1。这是可行的,因为布尔实际上是整数的一种特殊情况,其中True表示为1,False表示为0。因此,如果'Emma'不等于statement [i:i + 4],则0为添加(无效果),如果是,则添加1。

*该解决方案可能在len(statement) - 4之后停止,因为后3个字符也不能与4个字符的目标字符串'Emma'相匹配。

答案 1 :(得分:0)

statement[i: i + 4]是一个切片,将字符从i(包括)转换为i+4(不包括),并将其与字符串"Emma"进行比较。只要第一个值(开始)在字符串的范围内,第二个值(结束)是否超出范围就无关紧要;只是意味着它返回了较短的子字符串。

因此,-1中的range(len(statement)-1)在这里没有任何作用。它的作用是使循环i倒数第二个更早地停止循环,但是如果没有-1,它将同样有效。

话虽如此,您也可以只使用statement.count("Emma"))来获取子字符串"Emma"的计数(但是请注意,这不会计算重叠的匹配项)

答案 2 :(得分:0)

首先,字符串切片返回该字符串EG的子字符串。 "string"[1:4]成为tri

现在,statement[i:i+4]正在检查循环中当前点的下4个字母。因此,如果i为2,则statement[i:i+4]ma a。当i为24时,statement[i:i+4]Emma。因此,当i = 0或i = 24时,statement[i:i+4] == "Emma"将为True。

True和False也可以分别表示为整数1和0,因此从本质上讲,每当它为true时,我们就加1进行计数。

相关问题