首页 > 解决方案 > 试图在 python 中创建一个“折叠列表”?

问题描述

我需要制作一个“对半列表”,其中我将第一个和最后一个学期、第二个和第二个到最后一个学期、第三个和第三个到最后一个学期等相乘。

我知道如何制作列表以及如何从列表中打印特定值,但不了解如何在列表中进行这样的数学运算,而无需简单地键入每个数字并将它们相乘。

到目前为止,我只有一个包含六个项的列表(称为 a),虽然我知道如何将整数乘以整数,但我不知道如何制作这个“折叠”的东西。我最终需要制作某种循环吗?如果是这样,怎么做?

编辑:我应该指定我需要通过一个函数来实现它。有人通过一种非常有效的方法帮助我制作了一个,但是当我意识到它需要成为一个函数时,我再次尝试了它,但它不起作用。请参阅下面的代码。

a = [10, 14, 21, 25 ,52, 55]
print('starting list:', a)

查找列表的中间 len(a)//2

使用(我认为是)一个函数来制作第一个 + 最后一个术语的新列表,等等。术语 i 是从列表开头计算的术语,术语 -(i+1) 是从底部计算的术语名单

print(sum((a[i]) + (a[-(i + 1) ])) for i in range( len(a) // 2) 

一个有效但不是函数的代码,因为它有括号 foldedlist=[ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)] print('folded list :', 折叠列表)

标签: pythonlist

解决方案


把你的清单,在这里:

l = [1, 2, 3, 4, 5, 6]

找到中间点(折叠发生的地方 - 你需要考虑这对于奇数长度列表是如何工作的)

l_mid = len(l) / 2

制作两个子列表,然后从中点开始

l1 = l[:l_mid]
l2 = l[l_mid:]

为输出创建一个容器,然后遍历两个列表,将后者反转并将产品附加到容器中。

output = []
for v1, v2 in zip(l1, reversed(l2)):
    output.append(v1 * v2)

推荐阅读