递归创建字典以存储字符串中出现的字符

2024-04-20 03:05:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

问题

为以下函数提供递归实现: def外观(s、低、高) 函数被赋予一个字符串s和两个索引:low和high(low<;=high),它们表示需要考虑的索引范围。 该函数应返回一个字典,该字典存储字符到每个字符在s中出现的次数的映射。也就是说,字典的键应该是s中的不同字符,它们的关联值应该是它们在s中出现的次数

例如,呼叫外观(“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)

Tags: 函数代码if字典def情况字符次数
1条回答
网友
1楼 · 发布于 2024-04-20 03:05:00

不要使用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}

相关问题 更多 >