当列表的长度未知时,汇总Python列表中的前2个元素

时间:2014-07-18 13:59:10

标签: python arrays list sum conditional-statements

我正在编写来自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

但我想知道是否有办法用更少的条件语句解决问题。

3 个答案:

答案 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