【问题标题】:Summing first 2 elements in a Python list when the length of the list is unknown当列表的长度未知时,将 Python 列表中的前 2 个元素求和
【发布时间】:2014-09-09 16:48:22
【问题描述】:

我正在从 codingbat.com 进行以下 Python 列表练习:

给定一个整数数组,返回数组中前两个元素的和 大批。如果数组长度小于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

但我想知道是否有什么方法可以用更少的条件语句来解决这个问题。

【问题讨论】:

  • return sum(nums[:2])?
  • +1,因为它与接受的答案相同

标签: python arrays list sum conditional-statements


【解决方案1】:

有。解决方案的两个要素 - 内置函数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

【讨论】:

  • 那些不是“范围”,而是“切片”。
  • @jonrsharpe 没错,是在记住正确的术语。
  • 为什么我必须等待 10 分钟才能接受答案?
  • @MyCarta 以确保您有时间查看当时弹出的所有答案
  • 好的,谢谢您的澄清。这是有道理的。
【解决方案2】:

如果不能使用 sum,一种可能的解决方案是使用异常:

totalsum = 0
try:
  totalsum += nums[0]
  totalsum += nums[1]
except IndexError:
  pass
return totalsum

如果元素不存在,则捕获错误并短路求和。正如他们所说,请求宽恕比请求许可更容易。

【讨论】:

  • 更好地使用except IndexError - 一个“赤裸的”except 可以捕获各种其他东西(例如TypeError,因为nums 根本无法被索引或不被索引只包含数字)。
  • 不能用,因为这个练习是结构化的,所以我必须用 sum 但是很有趣,不知道有什么异常,谢谢。
  • @MyCarta 你的第一个答案没有使用sumEAFP 是一种常见的 Python 编码风格,值得关注。
  • 好的,我尝试了@TheSoundDefense 建议的代码,它可以工作。真的很有趣,我同意值得学习。我可以选择任何一个答案。
【解决方案3】:

试试这个:

def sum2(nums):
  if len(nums) == 1:
    return nums[0]
  else:
    return sum(nums [:2])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 2015-07-22
    • 2021-11-23
    • 2021-10-29
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多