这是关于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解决方案,或者第一种解决方案是否足够好?
谢谢.
你的(替代)解决方案很棒,除了这个小小的变化:
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)
看似没有括号的列表推导的语法称为生成器表达式.
我不知道有任何可读的方法来获得一个解决方案,而不是在列表中迭代两次,而不是你已经拥有的那个.我仍然会使用上面的解决方案,除非探查器告诉我必须加快速度.