我有彩票优惠券:

coupons = [[1,4,7,34,45,67], [2,8,16,34,35,38] ... ]

结果是:
result = [7,12,13,26,29,34]

我怎样才能把优惠券上的中奖号码一行数出来?
我希望返回统计信息,例如:
statistics = [20, 15, 11, 1, 0, 0, 0]

哪里
统计信息[0]-中奖号码为0的优惠券数量,
统计数据[1]-有1个中奖号码的优惠券数量,
统计数据[2]-有两个中奖号码的优惠券数量,
统计数据[3]-有3个中奖号码的优惠券数量,
统计数据[4]-有4个中奖号码的优惠券数量,
统计数字[5]-5个中奖号码的优惠券数量,
统计[6]-有6个中奖号码的优惠券数量

最佳答案

试试这个:

from collections import Counter

coupons = [[1,4,7,34,45,67]  , [2,8,16,34,35,38],
           [7,12,13,26,29,34], [1,2,3,4,5,6]]
result  = [7,12,13,26,29,34]

answer = Counter([6-len(set(result)-set(s)) for s in coupons])

最后一行是请求的一行。注意,我必须更改内部使用的数据结构才能工作-优惠券和结果现在都以集合的形式表示,结果存储在Counter(一种特殊类型的字典)中,但对于所有实际用途,答案都表现为一个数组:
answer[0]
> 1

...

answer[6]
> 1

更新
好的,我设法在一行中把转换压缩成一个实际的列表。它不是有效的(你最好使用我上面的第一个解决方案),但见鬼,它是有效的,而且它在一行中:
[Counter([6-len(set(result)-set(s)) for s in coupons])[x] for x in xrange(7)]

关于python - 在一行中计算彩票中奖券的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13260234/

10-12 17:00