Pythonic比例计算两个条件

mmm*_*reg 1 python

这是关于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
Run Code Online (Sandbox Code Playgroud)

替代解决方案:

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
Run Code Online (Sandbox Code Playgroud)

替代方案对我来说看起来更性感,虽然它循环通过项目两次并且效率不高.对于这种常见情况是否有可接受的pythonic解决方案,或者第一种解决方案是否足够好?

谢谢.

Joc*_*zel 6

你的(替代)解决方案很棒,除了这个小小的变化:

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
Run Code Online (Sandbox Code Playgroud)

看似没有括号的列表推导的语法称为生成器表达式.

我不知道有任何可读的方法来获得一个解决方案,而不是在列表中迭代两次,而不是你已经拥有的那个.我仍然会使用上面的解决方案,除非探查器告诉我必须加快速度.

  • 顺便说一句,因为我一直想使用复数至少一次:`s = sum(复数(x> 3,x> 5)表示项目中的x); 得分=浮点数(s.real)/ s.imag` ;-) (3认同)