我正在尝试编写一个带有字符和直方图的函数'add_to_hist',并将该字符的出现添加到直方图中。如果角色还没有条目,则应创建一个条目。例如:
>>>hist = [['B',1],['a',3],['n',2],['!',1]]
>>>add_to_hist('a',hist)
>>>hist
应该返回:[['B', 1], ['a', 4], ['n', 2], ['!', 1]]
这是我到目前为止所做的:
def add_to_hist(x,hist):
if x in hist:
hist['a'] = hist['a'] + 1
return hist
else: hist.append(x)
return (hist)
答案 0 :(得分:0)
您选择将直方图表示为2元素列表的列表;但是在add_to_hist
函数中,在else
分支中,您追加项目本身。你应该追加[x, 1]
。另外,出于同样的原因,您无法检查if x in hist
,因为x
是一个项目(str),但hist的元素是列表。
您的函数中还存在其他错误(缩进不正确;使用'a'
代替x
)。
如果不需要使用列表列表,则有更好的方法可以执行此操作,例如使用dict
代替列表,defaultdict(int)
或{{3} } class。
看起来你的代码是用字典编写的:
hist = {'B': 1, 'a': 4, 'n': 2, '!': 1}
def add_to_hist(x,hist):
if x in hist:
hist[i] = hist[i] + 1
else:
hist[i] = 1
return hist
答案 1 :(得分:0)
将直方图表示为字典更容易,因为您可以直接访问与x匹配的元素。
但是,按原样(假设您被迫使用列表),以下是您解决此问题的方法:
def add_to_hist(x,hist):
for i in range(len(hist)):
if x == hist[i][0]:
hist[i][1] = hist[i][1] + 1
return hist
hist.append([x, 1])
return hist
它是一个列表清单,你不能直接做" x in hist"因为它只是尝试将x与hist的每个元素(这是一个列表)匹配,所以这将永远不会起作用。你必须运行hist,获取每个元素,然后比较x。如果找到它,请在找到的列表的第二个元素中添加一个,然后返回。
现在,如果你在没有找到匹配元素的情况下遍历整个for循环,你知道它不存在,所以你可以在hist中添加一个新值。