python中的简单计算

时间:2011-12-06 12:04:42

标签: python

我有一个从最大值到最小值的整数列表,如下所示:[2345,67,24,24,11,11,6,6,6,6,6,3,3,3,3,3,1,1,1,1,1,1]

我只想计算此列表中每个值的部分,例如5%为'1',4%为'3',1%为2345并打印出此结果

有什么简单的方法可以做到这一点?

4 个答案:

答案 0 :(得分:3)

一种方式。我相信会有更好的方法来做到这一点。

   import collections
   d = collections.defaultdict(float)

   ip = [2345,67,24,24,11,11,6,6,6,6,6,3,3,3,3,3,1,1,1,1,1,1]
   length = len(ip)

   for i in ip:
       d[i] += 1

   for i in d:
       print "%5d : %.2f%%" % (i, (d[i]/length) * 100)

答案 1 :(得分:2)

此解决方案利用了这样一个事实:您的元素已经被排序,并且只进行一次原始列表传递(以及通过剩余数据结构的常量传递。

>>> from itertools import groupby
>>> x = [2345,67,24,24,11,11,6,6,6,6,6,3,3,3,3,3,1,1,1,1,1,1]
>>> grouped_x = [(k, sum(1 for i in g)) for k,g in groupby(x)]
>>> grouped_x
[(2345, 1), (67, 1), (24, 2), (11, 2), (6, 5), (3, 5), (1, 6)]

groupby表达式是从first question I ever asked on SO借来的,基本上只是将每个具有相同值的连续块组合成list个(值,实例生成器)对。然后外部列表理解只是将实例生成器转换为它们的总长度。

我认为OP的数据不准确,但这似乎与他所得到的相似。我采用了天花板功能,但你也可以round

>>> from math import ceil
>>> for k, v in grouped_x:
print int(ceil(100 * v / float(len(x)))),
print  "% is", k


5 % is 2345
5 % is 67
10 % is 24
10 % is 11
23 % is 6
23 % is 3
28 % is 1

答案 2 :(得分:0)

不是一个简单的函数,而是一些列表理解:

x = [2345,67,24,24,11,11,6,6,6,6,6,3,3,3,3,3,1,1,1,1,1,1]
print [(i,x.count(i) * 100 / len(x)) for i in set(x)]

将打印

[(1, 27), (67, 4), (6, 22), (2345, 4), (11, 9), (3, 22), (24, 9)]

这是元素/百分比对。

答案 3 :(得分:0)

from collections import Counter, OrderedDict

items_count = len(x)

percentage_tuples = map(lambda tup: (tup[0], 100 * float(tup[1]) / items_count),
    Counter(x).most_common())
percentage_dict = OrderedDict(percentage_tuples)

percentage_dict将按照从高到低的顺序排序。

将其打印出来:

for item in percentage_tuples:
    print("%d%% is '%s'" % (item[1], item[0]))