用于创建直方图的简单模块

时间:2014-11-26 19:33:16

标签: python histogram

作为一个新手程序员试图创建一个简单的模块来打印直方图。(###用于打印直方图,因为我不熟悉使用utf-8代码 这是程序

这个porgam作为一个示例列表采用36个哈希但不创建4柱直方图

这个程序的想法是程序按元素读取list-x元素,如果element等于list max value,它打印一个hash,将max值减1,所有元素都等于max value。如果列表元素小于最大值,则打印空白。随着迭代在某个时间进行,越来越多的元素将打印哈希以创建直方图,并且当所有列表元素为零时处理终止,并且此时打印列表元素标签。 如何修改程序以打印4柱直方图或n柱直方图,其中n是列表长度

def histogram(x):


    while x!=[0]*len(x):
       for i in range(len(x)):
           y=max(x)

           if x[i]==y:
               print("###"),
               y-=1
               x[i]-=1


           if x[i]<y:
               print("   "),

           if x==[0]*len(x):
               print "  A  ","  B  " ,"  C ","  D "




x=[10,2,12,22]
print histogram(x)

3 个答案:

答案 0 :(得分:0)

我不完全确定你要完成什么。但是我假设你正试图用一些ascii表示一个histrogram。

您可以将输入(整数列表)转换为长度与列表中每个值匹配的字符串列表:

hist = (x*'#' for x in input)

最长的字符串将由

给出
m = max(input)

您可以用来填充字符串:

histPadded = (x.rjust(m, " ") for x in hist)

然后转置它:

flipped = flipped = zip(*list(histPadded))

然后你可以把它打印出来:

list(map(lambda x: print("".join(map(str, x))), flipped))

需要外部list来强制进行评估。

答案 1 :(得分:0)

根据要求,这里有一个看起来像原始解决方案的答案 - 只需修改以提供正确的结果。

def histogram(x):
    y=max(x)
    while x!=[0]*len(x):
        for i in range(len(x)):
            if x[i]==y:
                print("###"),
                x[i]-=1
            elif x[i]<y:
                print("   "),
        print("")
        y-=1
    print " A   B   C   D "

答案 2 :(得分:0)

这符合您减少每次迭代的最大值的想法。

def h(x):
    mx =max(x)
    lx = len(x)
    m = []
    for v in x :
        # reduces max value by 1 in each ieration
        #                    VVVVVV
        m.append(["   "if v < mx-n else "***" for n in range(l)])
        #                    ^^^^^^
    return "\n".join(["  ".join(t) for t in zip(*m)]+
                     ["  ".join([" A "," B "," C "," D "," E ", " F "][:lx])])

测试

x=[10,2,12,11]
print h(x)

输出

          ***     
          ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***       ***  ***
***  ***  ***  ***
***  ***  ***  ***
 A    B    C    D