Skip to main content
 首页 » 编程设计

Pythonic 两种情况的比例计算

2025年05月04日24TianFang

这是一个关于 pythonic 编码的非常简单的问题。

给定一个列表,如果你想计算满足(A 和 B)的项目在满足(A)的项目中所占的比例,一个自然的解决方案是:

假设列表是整数,条件 A 是 (>3),条件 B 是 (>5)

count = 0 
correct = 0 
 
for item in items: 
  if item > 3: 
    count += 1 
 
    if item > 5: 
      correct += 1 
 
score = float(correct) / count 
print '%.2f' % score 

另一种解决方案:

count = len([1 for i in items if i > 3]) 
correct = len([1 for i in items if i > 5]) 
 
score = float(correct) / count 
print '%.2f' % score 

替代方案对我来说看起来更性感,尽管它循环遍历项目两次并且效率不高。对于这种常见情况是否有公认的 pythonic 解决方案,或者第一个解决方案是否足够好?

谢谢。

请您参考如下方法:

您的(替代)解决方案很棒,除了这个小改动:

count = sum(1 for i in items if i > 3) 
correct = sum(1 for i in items if i > 5) 
 
score = float(correct) / count 
print '%.2f' % score 

看起来像没有括号的列表理解的语法称为 generator expression .

除了您已有的方法之外,我不知道有任何可读的方法可以在不遍历列表两次的情况下获得解决方案。我仍然会使用上面的解决方案,除非 profiler 告诉我必须加快速度。