为了账号安全,请及时绑定邮箱和手机立即绑定

如何在列表中找到奇数索引值的乘积

如何在列表中找到奇数索引值的乘积

慕尼黑8549860 2022-07-19 15:39:03
我能够在“偶数”部分解决这个问题,但我陷入了奇数部分。您将获得一组n数字。您的任务是首先反转数组(第一个数字变为最后一个,第二个数字从最后一个变为第二个,依此类推),然后打印偶数索引处的数字总和并打印奇数索引处的数字的乘积。输入第一行包含单个整数 N:元素的数量,后跟 N 个不同的整数,用空格分隔输出两个空格分隔的整数,表示偶数位数字的总和和奇数位数字的乘积。到目前为止我的代码:n = int(input())arr = [int(x) for x in input().split()]arr.reverse()for ele in arr:    print(ele, end=" ")print()sum = 0count = 1while count <= n:    if count % 2 == 0:        sum += count    count += 1print(sum)
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您提供的代码中有几个问题,我将首先解决:


首先,您需要清楚奇数和偶数索引的含义。例如,在某些语言(Matlab)中,数组的第一个元素是索引位置 1。在 Python 和 Java 中,它是 0,因此,虽然您的示例假定为 1,但除非另有说明,否则它可能应该为 0。


其次,在您的行中,sum+=count您是在汇总索引位置,而不是索引值,因此这不是您的问题所要求的。


您的代码的最后一点是您已用作sum变量名。虽然这有效,但sum它也是一个 Python 关键字,您应该避免将它们用作变量名,就像您以后要使用该sum函数一样,您将收到错误TypeError: 'int' object is not callable,因为您已将该sum函数重新定义为整数。


对于答案:


考虑到上述情况,这通过修复您的代码为第 1 部分提供了答案:


total = 0

count = 0

while count < n:

    if count % 2 == 0:

        total += arr[count]

    count += 1

print(total)

值得注意的是,当您正在寻找偶数时,您最好将其写为:


total = 0

count = 0

while count < n:

    total += arr[count]

    count += 2

print(total)

然而,还有更简单的方法可以用更少的代码做到这一点,它们涉及列表切片。您可以通过指定 对列表进行切片[start: end: step],因此arr[::2]指定位置 0 的开始(默认值),列表末尾的默认值)和步长 2。这意味着如果arr包含[1,2,3,4,5,6],arr[::2]则将是[1,3,5](即值在所有偶数索引处)或者如果您指定1ie的起始位置,arr[1::2]您将获得[2,4,6](即所有偶数索引处的值)。


所以,而不是使用一个while循环。您可以仅对偶数值使用for循环:


total = 0

for even_val in arr[::2]:

    total += even_val

print(total)

但是对于sum您可以更轻松地编写为sum列表切片上的简单命令:


print(sum(arr[::2]))

在 Python 3.8 之前,没有简单的sumfor product 等价物,因此如果您使用的是较低版本,您可以重用上述方法,考虑到您需要用第一个值对总数进行质数,然后相乘从下一个开始,即:


total = arr[1]

count = 3

while count < n:

    total *= arr[count]

    count += 2

print(total)

或使用for循环:


total = arr[1]

for odd_val in arr[3::2]:

    total *= odd_val

print(total)

但是从 Python 3.8(此处的文档)您现在可以prod从math库中导入,其工作方式与以下内容相同sum:


from math import prod

print(prod(arr[1::2]))


由于这是针对问题集,因此可能不是问题,因为所有示例的数组长度都可能N> 2,但上面的示例确实假设arr. 如果不是这种情况,您应该在尝试访问之前进行一些验证arr[1]


查看完整回答
反对 回复 2022-07-19
?
呼唤远方

TA贡献1856条经验 获得超11个赞

这是一个可爱的小递归函数(假设基于一个的索引):


# def prodSum(increment,multiplier=1,*rest): if zero based indices


def prodSum(multiplier,increment=0,*rest):  

    if not rest: return multiplier,increment

    product,total = prodSum(*rest)

    return (product * multiplier, total + increment)


x = [1,2,3,4,5]

print(prodSum(*reversed(x))) # 15,6


查看完整回答
反对 回复 2022-07-19
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信