【问题标题】:Python string slicing example set [duplicate]Python字符串切片示例集[重复]
【发布时间】:2017-11-17 09:41:57
【问题描述】:

我已经研究这个问题几个小时了,但我似乎无法理解。我的逻辑与这个太不同了

目标是根据问题要求的预期输出确定单词“bob”出现的次数 = 2。

我只是不知道怎么去那里。我做到了:

s = 'azcbobobegghakl'
bob = 0
for i in range(len(s)):
    print(s[i: i+3])
print("Number of times bob occurs is: ", bob)

如果有人回答这个问题,请向我解释你是如何得到答案的。提前致谢

【问题讨论】:

  • 您需要将s[i: i+3]"bob" 进行比较,如果相等,则增加您的bob 计数。

标签: python string algorithm python-3.x slice


【解决方案1】:

请检查代码。

s = 'azcbobobegghakl'
bob = 0
for i in range(len(s)):
    print(s[i: i+3])
    if s[i: i+3] == "bob":
        bob += 1
print("Number of times bob occurs is: ", bob)

输出是,

azc
zcb
cbo
bob
obo
bob
obe
beg
egg
ggh
gha
hak
akl
kl
l
Number of times bob occurs is:  2

【讨论】:

    【解决方案2】:

    你的答案其实很简单。你已经解决了一半的问题。您以三个为单位对字符串进行迭代。您需要知道的是测试这些子字符串中的任何一个是否等于字符串"bob"。如果是这样,请将bob 计数器增加1

    >>> s = 'azcbobobegghakl'
    >>> bob = 0
    >>> 
    >>> for i in range(len(s)):
        substr = s[i: i + 3]
        # is the current three letter substring equal to "bob"?
        if substr == 'bob':
            # if so, increment the counter by one.
            bob += 1
    
    
    >>> bob
    2
    >>> 
    

    【讨论】:

      【解决方案3】:

      下面的 sn-p 使用正则表达式库 re 来查找不重叠的子字符串并将找到的所有实例作为列表返回。列表中的len() 是出现次数。

      import re
      number_of_bob = len(re.findall("bob", "azcbobobegghakl"))
      

      此方法不适用于重叠模式。在一行中查找重叠子字符串的数量:

      number_of_bob = sum(1 for i in range(len(s)-2) if s[i:i+3] == 'bob')
      

      【讨论】:

      • 实际上 findall 只找到 non-overlapping 匹配项 - 因此您的代码将返回 1,而不是 2。
      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      • @Donald Duck 回答已更正,谢谢。
      猜你喜欢
      • 2012-02-10
      • 2018-11-26
      • 2014-07-21
      • 2012-02-15
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多