用函数迭代处理列表

时间:2019-07-19 23:48:41

标签: python python-3.x list

我有一个列表,该列表根据函数的结果而有所不同。该函数旨在返回上一个列表的两个连续元素之和,直到只剩下两个元素。我打算使用function generateNewScope() { var ss = SpreadsheetApp.getActiveSpreadsheet(); ss.setActiveSheet(ss.getSheetByName("SourceData")); var ns = ss.duplicateActiveSheet(); var range = ns.getDataRange(); // Added range.copyTo(range, {contentsOnly: true}); // Added allSheets = ss.getSheets(); ns.setName(allSheets.length - 4); } 循环来获取总和,但是找不到正确的语法来使我的代码正常工作。有一个简单的方法吗?

这是我的代码,用于获取数组中两个连续元素的和,但是我不太清楚如何循环它:

for

1 个答案:

答案 0 :(得分:1)

通常,函数应该返回值而不是打印结果。当然,除非它是要打印的功能。在您的情况下,这意味着您需要将计算出的总和累加到一个列表中。另一个要点是,您无需传递列表的大小。列表对象已经在其中编码了该信息。将这些部分放在一起,您将得到

def pair_sum(lst):
    sum = []
    for i in range(len(lst) - 1):
        sum.append((lst[i] + lst[i + 1]) % 10)
    return sum

您可以通过列表理解来进一步缩短此时间:

def pair_sum(lst):
    return [(lst[i] + lst[i + 1]) % 10 for i in range(len(lst) - 1)]

现在,您可以使用此功能从原始图片中获取较小的列表:

>>> pair_sum(x)
[1, 0, 2, 2, 2, 2, 2]

您可以拨打两次:

>>> pair_sum(pair_sum(x))
[1, 2, 4, 4, 4, 4]

但是您的目标不是手动调用两次函数,而是一直调用它,直到列表减少到一个元素为止。由于该函数返回一个列表,因此您可以继续将该结果传递回该函数,直到结果只有一个元素为止:

while len(x) > 1:
    x = pair_sum(x)
    print(x)

结果是

[1, 0, 2, 2, 2, 2, 2]
[1, 2, 4, 4, 4, 4]
[3, 6, 8, 8, 8]
[9, 4, 6, 6]
[3, 0, 2]
[3, 2]
[5]

while循环显然是这里更直观的解决方案。但是,您也可以使用for循环。诀窍是要注意,列表的大小每次都会减少一个元素。要从大小N变为1,您需要循环N-1次:

for _ in range(len(x) - 1):
    x = pair_sum(x)
    print(x)