这是一个关于 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 告诉我必须加快速度。
