一些可以优化的事情:
-
max(votes)
不取决于
i
,因此不应在每次循环迭代中对其进行评估。在循环开始前对其进行一次评估。
-
表达方式也是如此
k == 0 and votes.count(max(votes)) == 1
。它不依赖于循环变量,因此不应出现在循环中。它应该成为决定循环是否应该执行的条件。
-
k + i > max(votes) and votes.count(k + i) <= 1
:如果条件的第一部分为真,则条件的第二部分始终为真。什么时候
k + i
大于列表中最大的一个,这个总数
不
出现在列表中,即计数为零。
综合所有这些,你可以这样写:
def electionsWinners(votes, k):
greatest = max(votes)
if k == 0:
if votes.count(greatest) == 1:
return 1
else:
return 0
counter = 0
for i in votes:
if k + i > greatest:
counter += 1
return counter
你可以通过使用
sum
而不是“手册”
counter += 1
.同时,代码也可以减少一点:
def electionsWinners(votes, k):
greatest = max(votes)
if k == 0:
return int(votes.count(greatest) == 1)
return sum(1 for i in votes if k + i > greatest)
甚至:
def electionsWinners(votes, k):
mx = max(votes)
return sum(1 for i in votes if k + i > mx) if k else int(votes.count(mx) == 1)