我如何编写一个函数,它接受一个整数列表,并创建一个与原始列表元素数量相同的新列表,以便新列表中的每个整数都是其邻居和原始列表中自身的总和。例如,如果a_list = [10, 20, 30, 40, 50]
,则new_list = [30, 60, 90, 120, 90]
。在
我试着理解列表
def sum_neighbours(a_list):
b_list = a_list
li = [x+y for x in a_list for y in b_list]
return li
print(sum_neighbours([10, 20, 30, 40, 50]))
它给了我
^{pr2}$然后我尝试了一个for循环
def sum_neighbours(a_list):
element1 = a_list[0]
new_list = []
for element in a_list:
element1 += element
new_list += element1
return new_list
print(sum_neighbours([10,20,30,40,50]))
它抛出了一个TypeError: 'int' object is not iterable
但在这两种情况下,我都不认为我的想法/尝试是正确的。。。如果有经验的人能给我一些帮助、提示、提示,我将不胜感激。在
{1>我的解决方案是^行:
有:
a
,原始列表zip(a,a[1:],a[2:])
,三元组生成[(a[0],a[1])] and [(a[-2],a[-1])]
,特殊情况下的2元组(列表的第一个和最后一个数字)您可能需要一个
for i in range
循环,并直接索引到数组中,这样就可以查看i+1和i-1索引处的元素(确保检查+/-1没有超出数组的边界)。在可以从迭代列表索引的解决方案开始,如下所示:
或者,您可以构建三个不同的列表:原始列表、左侧邻居列表和右侧邻居列表。我们必须把
0
放在辅助列表的前面或后面。每个列表的长度必须至少与原始列表相同。在将三个列表压缩在一起,然后添加它们:
^{pr2}$请注意,我使用了函数表示法
map(sum, data)
,但我可以同样容易地使用列表理解:如果我想把结果变成一个表达式(例如,如果它必须适合lambda表达式),这里是:
相关问题 更多 >
编程相关推荐