我有一个列表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)
我怎样才能修好它
您的代码:
我的代码
在代码中,您已经包含了第一个元素,并且从1开始循环,即您已经忽略了它。您不需要再次忽略for循环停止条件,所以将2更改为1就是这样
科学方法
我相信python有很多方面需要研究,不仅仅是从算法的角度来学习,而且学习python方法更有价值,而且可能还有更科学的计算方法
这就是为什么在给出所有答案的同时,我还提出了另一种解决方案,使用卷积运算,这是一种更为通用的数学运算,它只是一个实例,更准确地说,您希望使用以下过滤器卷积给定数组:
[1, 1, 1]
这可以通过使用
numpy
库的convolve
函数来完成,如下所示:我鼓励你通读该文件并了解更多信息。我只是想表明学习python是一个非常重要的步骤,为此做好计划
祝你好运
这是因为
for i range(x,y)
从x
(包含)迭代到y
(排除)。在您的情况下,最大的i = len(list1)-3
。这意味着您无法访问所有元素。您可以通过将其更改为for i in range(1, len(list1)-1)
来修复它相关问题 更多 >
编程相关推荐