计算每个元素及其相邻元素之和时缺少一项

2024-04-25 07:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表list1,它的元素在1到100之间是随机的,它的长度是3到21之间的随机数

import random

list1 = []
start = 1
end = random.randint(3, 21)
for i in range(start, end + 1):
    list1.append(random.randrange(1, 101, 1))

print("My list length is", end)
print("List1 (Original List):", list1)

我的目标是创建一个具有与list1相同数量元素的新列表,这样每个元素都是list1中相同元素及其左右邻域的总和。(因为第一个元素没有左手边的邻居,而最右边的元素没有右手边的邻居,所以我将不包括它们。)

我曾尝试编写此代码,但输出的元素编号与list1不同

list2 = (
    [list1[0] + list1[1]]
    + [list1[i-1] + list1[i] + list1[i+1] for i in range(1, len(list1)-2)]
    + [list1[-2] + list1[-1]]
)
print(list2)

我怎样才能修好它


Tags: inimport元素列表forrangerandomstart
1条回答
网友
1楼 · 发布于 2024-04-25 07:22:45

您的代码:

list2=[]
list2=[list1[0]+list1[1]] + [list1[i-1]+list1[i]+list1[i+1] for i in range(1,len(list1)-2)]+ [list1[-2]+list1[-1]]
print (list2)

我的代码

list2=[]
list2=[list1[0]+list1[1]] + [list1[i-1]+list1[i]+list1[i+1] for i in range(1,len(list1)-1)]+ [list1[-2]+list1[-1]]
print (list2)

在代码中,您已经包含了第一个元素,并且从1开始循环,即您已经忽略了它。您不需要再次忽略for循环停止条件,所以将2更改为1就是这样

网友
2楼 · 发布于 2024-04-25 07:22:45

科学方法

我相信python有很多方面需要研究,不仅仅是从算法的角度来学习,而且学习python方法更有价值,而且可能还有更科学的计算方法

这就是为什么在给出所有答案的同时,我还提出了另一种解决方案,使用卷积运算,这是一种更为通用的数学运算,它只是一个实例,更准确地说,您希望使用以下过滤器卷积给定数组:[1, 1, 1]

这可以通过使用numpy库的convolve函数来完成,如下所示:

import numpy as np

np.convolve([1,2,3,4], [1,1,1])
>>> array([1, 3, 6, 9, 7, 4])

np.convolve([1,2,3,4], [1,1,1], 'same')
>>> array([3, 6, 9, 7])

np.convolve([1,2,3,4], [1,1,1], 'valid')
>>> array([6, 9])

我鼓励你通读该文件并了解更多信息。我只是想表明学习python是一个非常重要的步骤,为此做好计划

祝你好运

网友
3楼 · 发布于 2024-04-25 07:22:45

这是因为for i range(x,y)x(包含)迭代到y(排除)。在您的情况下,最大的i = len(list1)-3。这意味着您无法访问所有元素。您可以通过将其更改为for i in range(1, len(list1)-1)来修复它

相关问题 更多 >