def min_value(L)
'''我是一个> = -1的整数列表。返回L中的最小值> -1。如果L除了-1之外没有任何值,则返回-1。'''
ans = -1
for n in L:
if n> -1:
if ans == -1: <------------?? Can someone explain why they are doing this. Isn't ans already equal -1?? Thus processing ans = n every time??
ans = n
else:
ans = min(ans, n)
return ans
ANYHELP将受到极大的赞赏。
答案 0 :(得分:4)
ans
以-1
开头,但值会更改:
if ans == -1:
ans = n # Right here
else:
ans = min(ans, n) # And right here
如果ans
保持-1
,则列表中的数字不会超过-1
。
稍微更易读的方法是:
def min_value(L):
filtered = [n for n in L if n > -1]
if not filtered:
return -1
else:
return min(filtered)
答案 1 :(得分:0)
如果省略if ans == -1: ans = n
行,而只是执行ans = min(ans, n)
,则ans
将保持为-1,而不是更改为大于-1的最小值。
以下是一些略短的替代代码:
def min_value(L)
ans = -1
for n in L:
if n > -1:
ans = min(n, max(ans,n))
return ans
例如:
min_value([-2, 3, -4, -5])
给出3,
min_value([-2, 3, -4, 2])
给出2和
min_value([-2, -3, -4, -5])
给-1。
答案 2 :(得分:0)
我认为这更清楚:
def min_value(L):
try:
return min(n for n in L if n > -1)
except ValueError:
# this gets raised if all n in L are not > -1
return -1
答案 3 :(得分:0)
def min_value(L):
return min([i for i in L if i >= -1] or [-1])