我下面有这个代码
有没有一种方法可以在1行而不是if和else的最后4行中返回较大的列表(1/2)?
#Write your function here
def larger_sum(lst1, lst2):
sum1 = 0
sum2 = 0
for num in lst1:
sum1+=num
for num in lst2:
sum2+=num
if sum1 > sum2:
return lst1
else:
return lst2
#Uncomment the line below when your function is done
print(larger_sum([1, 9, 5], [2, 3, 7]))
答案 0 :(得分:3)
这可以一行完成:
def larger_sum(lst1, lst2):
return max([lst1, lst2], key=sum)
max
函数从其输入返回最大的项目。当给定键功能而不是比较项目时,将对键功能应用于项目的结果进行比较,并返回将键功能应用于其结果最大的项目。
答案 1 :(得分:2)
if sum1 > sum2:
return lst1
else:
return lst2
等同于
return ls1 if sum1 > sum2 else lst2
答案 2 :(得分:1)
return lst1 if sum1 > sum2 else lst2
答案 3 :(得分:0)
对我来说,您的代码看起来还不错,但是如果您需要1行而不是4条价格,则可以这样做:
def larger_sum(lst1, lst2):
sum1 = 0
sum2 = 0
for num in lst1:
sum1+=num
for num in lst2:
sum2+=num
return [lst2,lst1][sum1>sum2]
说明:在Python中,True
和False
会根据需要转换为1
和0
,因此如果不满足条件,它将返回第0个元素({ {1}})和第一元素(lst2
)否则(索引从0开始)
答案 4 :(得分:0)
我会这样写:
def larger_sum(lst1, lst2):
return lst1 if sum(lst1) > sum(lst2) else lst2
说明:
在python中,您可以使用条件表达式返回基于条件的值或将其分配给变量(类似于Java或c ++等其他语言中的三元运算符):
x = val_1 if condition else val_2
等效于:
if condition:
x = val_1
else:
x = val_2
这是一个不错的语法糖。
此外,内置的sum
函数采用任何可迭代的方式(可以在for
循环中使用的任何方式)并求和其值。这段代码:
sum_ = 0
for x in lst:
sum_ += x
等效于:
sum_ = sum(lst)
我之所以称这个变量sum_
(带有下划线)为原因是为了防止遮盖内置函数sum
(如果我先执行sum = ...
然后s = sum(...) # trying to sum a list or something
会导致错误,因为我已覆盖sum
函数)。