天天看点

柱状图python_python柱状图一行

编写计算柱状图的python程序有很多种方法。

通过柱状图,我指的是一个计算对象在

iterable

并在字典中输出计数。例如:

>>> L = 'abracadabra'

>>> histogram(L)

{'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r': 2}

编写此函数的一种方法是:

def histogram(L):

d = {}

for x in L:

if x in d:

d[x] += 1

else:

d[x] = 1

return d

写这个函数有更简洁的方法吗?

如果我们有关于python的字典理解,我们可以写:

>>> { x: L.count(x) for x in set(L) }

但是由于python 2.6没有它们,我们必须写:

>>> dict([(x, L.count(x)) for x in set(L)])

虽然这种方法可能是可读的,但它是不有效的:l被遍历多次。此外,对于单寿命生成器,这不起作用;对于迭代器生成器,该函数应该同样有效,例如:

def gen(L):

for x in L:

yield x

我们可以尝试使用

reduce

功能(R.I.P.):

>>> reduce(lambda d,x: dict(d, x=d.get(x,0)+1), L, {}) # wrong!

哎呀,这不管用:密钥名是

'x'

不是

x

. :(

我的结局是:

>>> reduce(lambda d,x: dict(d.items() + [(x, d.get(x, 0)+1)]), L, {})

(在python 3中,我们必须

list(d.items())

而不是

d.items()

但这是假设,因为没有

减少

在那里)

请用更好、更易读的一行字打败我!;)