我正在编写来自codingbat.com的以下Python列表练习:
给定一个int数组,返回前两个元素的总和 阵列。如果数组长度小于2,则只需总结元素 存在,如果数组长度为0,则返回0.示例:
sum2([1, 2, 3]) → 3 sum2([1, 1]) → 2 sum2([1, 1, 1, 1]) → 2
我的解决方案有效:
def sum2(nums):
if len(nums)>=2:
return nums[0] + nums[1]
elif len(nums)==1:
return nums[0]
return 0
但我想知道是否有办法用更少的条件语句解决问题。
答案 0 :(得分:7)
有。解决方案的两个要素 - 内置函数sum
和列表slices:
>>> sum([1,2,3][:2])
3
>>> sum([1,1,1,1][:2])
2
>>> sum([1,1][:2])
2
>>> sum([1][:2])
1
>>> sum([][:2])
0
答案 1 :(得分:1)
如果您不能使用sum,则一种可能的解决方案使用例外:
totalsum = 0
try:
totalsum += nums[0]
totalsum += nums[1]
except IndexError:
pass
return totalsum
如果元素不存在,则捕获错误并使求和短路。正如他们所说,更容易请求宽恕而不是许可。
答案 2 :(得分:1)
试试这个:
namespace :listings do
desc "Send a message to an agent if the available date on their listing has passed"
task listing_available_expire: :environment do
Listing.all.each do |listing|
if listing.date_available == Date.today
ListingAvailableDateMailer.listing_available_expire(listing,listing.listing_agent).deliver_now
end
end
end
end