更改直方图Python中的值

时间:2015-04-26 21:31:03

标签: python histogram

我正在尝试编写一个带有字符和直方图的函数'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)

2 个答案:

答案 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中添加一个新值。