例如在while A and B
中,如果A为False,则无需评估B.那么在这种情况下是否会评估B?
同样,在if A or B
中,如果A为True,则无需评估B.
特定上下文是this problem,我写了
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
output = []
i = 0
while ( i < len(nums) ):
head = nums[i]
while ( i <= len(nums)-2 ) and (nums[i+1] == nums[i] + 1): ### question here
i += 1
tail = nums[i]
if head == tail:
output.append(str(head))
else:
output.append(str(head) + '->' + str(tail))
i += 1
我不知道它是否有效(受到其他错误的困扰)。在这里注释的问题&#39;,(nums[i+1] == nums[i] + 1)
会导致索引超过字符串长度i==len(nums)-1
,所以我添加( i <= len(nums)-2 )
试图阻止它。
有关如何修复/避免/规避这一点的任何建议表示赞赏。
答案 0 :(得分:1)
and
和or
执行短路。请注意,表达式的值始终是其中一个操作数的值,不一定是True
或False
。