我有彩票优惠券:
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/