【问题标题】:How to find the sum of elements located at odd indices in Python [duplicate]如何在Python中找到位于奇数索引处的元素的总和[重复]
【发布时间】:2017-07-12 06:05:21
【问题描述】:

我知道以前有人在这里问过类似的问题,但我的问题略有不同。我想编写一个函数,它接受一个正整数列表并返回位于奇数索引处的元素的总和。问题是,我只想使用 for 循环或 while 循环。 到目前为止,这是我所拥有的:

def getSumOdds(aList):
for i in range(0, len(aList)):
    if i%2 == 0:
        pass
    if i%2 != 0:
        sum = sum + aList[i]
        return sum

但是,当我将此代码输入 Python 时,我收到一条错误消息:builtins.UnboundLocalError: local variable 'sum' referenced before assignment。有谁知道找到总和或如何修复错误消息的更好方法?提前致谢。

【问题讨论】:

  • 注意将变量命名为与内置函数相同。这意味着你隐藏了这个功能。

标签: python python-3.x sum indices


【解决方案1】:

要解决此问题,您应该在 def 之后将 sum 初始化为零。另一件事是return sumfor 之后,而不是在最后一个if 之内。

(由于这个问题显然是关于作业的,我宁愿不讨论解决问题本身的高级方法。)

【讨论】:

  • 如果 OP 表现出一些努力,我会说可以回答家庭作业问题。显然他们在这里。
  • @PaulRooney 当然,我的意思是可以对代码进行大量优化,但这不太可能对 OP 有所帮助。
【解决方案2】:

您可以使用生成器(或列表推导):

def getSumOdds(aList):
    return sum(aList[i] for i in range(1,len(aList),2))

(假设 indexing 是支持的(list 支持这个)。

或者你可以像@MSeifert 说的那样使用切片

def getSumOdds(aList):
    return sum(aList[1::2])

(如果支持切片,并非所有集合都这样做)

这就是你所需要的:sum 是一个内置函数。

如果aList 是一个生成器(例如,您无法访问第 i 个元素),您可以使用itertools.islice

from itertools import islice

def getSumOdds(aList):
    return sum(islice(aList,1,None,2))

您也可以将此方法用于列表等(只要aList 是可迭代的)。

或者 - 再次支持给定索引 - 您可以将其放入 for 循环中:

def getSumOdds(aList):
    result = 0
    for i in range(1,len(aList),2):
        result += aList[i]
    return result

【讨论】:

  • 为什么不只是sum(aList[1::2])
  • @MSeifert:是的,因为它是一个列表,切片也是一个选项。将编辑。
  • “我只想使用 for 循环或 while 循环”OP 说
  • @Chris_Rands:列表理解是某种for 循环:)。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2016-12-29
  • 2012-11-24
  • 2016-06-04
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多