【问题标题】:Create dictionary recursively to store occurrences of characters in a string递归创建字典以存储字符串中出现的字符
【发布时间】:2023-04-07 06:17:01
【问题描述】:

我目前正在尝试解决这个问题。我在它之后添加了我当前的代码,但它还没有工作。理想情况下,我不需要全局变量,但我不太确定如何在函数中声明字典而不每次递归调用都重置它。

问题

给以下函数一个递归实现: def 出场次数(s, low, high) 该函数给出了一个字符串 s 和两个索引:low 和 high (low

例如,调用appearances("Hello world", 0, 10) 可以返回: {'e':1,'o':2,'H':1,'l':3,'r':1,'':1,'d':1,'w':1}。

注意:字典是一个可变对象。使用该属性更新从递归调用返回的字典。

我的代码

d = {}


def appearances(s, low, high):
    global d
    if low > high:
        print(d)
    else:
        if s[low] in d:
            d[s[low]] = int(d.get(s[low])) + 1
        else:
            d = {s[low]: 1}
        appearances(s, low + 1, high)

【问题讨论】:

  • d[s[low]] = 1 应该这样做而不是 d = {s[low]: 1}。或者,更奇怪的是,d.update({s[low]: 1})。顺便说一句,您的函数不返回字典
  • @DaniMesejo 哦,哇,谢谢!我没有排除这么小的解决方案。现在肯定更好,但我认为它不适用于多个单词字符串。并且感谢我回来时的注意事项,我之前从未使用过字典哈哈,所以我一定会调查一下。
  • 这被认为是solved 还是您还有疑问?

标签: python dictionary recursion


【解决方案1】:

不要使用global。使用return -

def appearances(s, lo, hi, d = {}):
  if lo > hi:
    return d
  try:
    k = s[lo]
    return appearances(s, lo + 1, hi, {**d, k: d[k] + 1})
  except KeyError:
    return appearances(s, lo + 1, hi, {**d, k: 1})
  except IndexError:
    return None
print(appearances("hello world", 2, 8))
{'l': 2, 'o': 2, ' ': 1, 'w': 1, 'r': 1}

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 2021-03-24
    • 2014-03-31
    • 2022-01-09
    • 2017-07-07
    • 2021-12-01
    • 2014-03-30
    相关资源
    最近更新 更多