在lis中添加相邻元素

2024-04-23 20:00:31 发布

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

我如何编写一个函数,它接受一个整数列表,并创建一个与原始列表元素数量相同的新列表,以便新列表中的每个整数都是其邻居和原始列表中自身的总和。例如,如果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

但在这两种情况下,我都不认为我的想法/尝试是正确的。。。如果有经验的人能给我一些帮助、提示、提示,我将不胜感激。在


Tags: 函数in列表newforreturndef整数
3条回答

{1>我的解决方案是^行:

def sum_neighbours(a) :
    return [sum(x) for x in [(a[0],a[1])]+zip(a,a[1:],a[2:])+[(a[-2],a[-1])]]

print sum_neighbours([10, 20, 30, 40, 50]) # display [30, 60, 90, 120, 90]

有:

  • 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没有超出数组的边界)。在

可以从迭代列表索引的解决方案开始,如下所示:

def sum_neighbours1(a_list):
    result = []
    for i in range(len(a_list)):
        if i == 0:
            result.append(a_list[i] + a_list[i+1])
        elif i == len(a_list)-1:
            result.append(a_list[i-1] + a_list[i])
        else:
            result.append(a_list[i-1] + a_list[i] + a_list[i+1])
    return result

print(sum_neighbours1([10,20,30,40,50]))

或者,您可以构建三个不同的列表:原始列表、左侧邻居列表和右侧邻居列表。我们必须把0放在辅助列表的前面或后面。每个列表的长度必须至少与原始列表相同。在

将三个列表压缩在一起,然后添加它们:

^{pr2}$

请注意,我使用了函数表示法map(sum, data),但我可以同样容易地使用列表理解:

def sum_neighbours3(a_list):
    priors = [0] + a_list
    subsequents = a_list[1:] + [0]
    return [p+a+s for p,a,s in zip(priors, a_list, subsequents)]

如果我想把结果变成一个表达式(例如,如果它必须适合lambda表达式),这里是:

def sum_neighbours4(a_list):
    return [
        left + a + right
        for left, a, right in zip(
            [0] + a_list,
            a_list,
            a_list[1:] + [0])
    ]

相关问题 更多 >