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

问题描述 投票:-1回答:1

我能够在“偶数”部分解决此问题,但我陷入了奇数部分。

您将获得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 = 0
count = 1
while count <= n:
    if count % 2 == 0:
        sum += count
    count += 1
print(sum)
python arrays list reverse
1个回答
0
投票

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

首先,您需要清楚奇数和偶数索引的含义。例如,在某些语言中(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](即所有偶数索引处的值),或者如果您指定1的开始位置(即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]))

产品的sum没有简单的等价物,因此您可以重用上述方法,从而需要将总数与第一个值相乘,然后从下一个乘以,即得出这样的事实:

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)
© www.soinside.com 2019 - 2024. All rights reserved.