我有一个列表,该列表根据函数的结果而有所不同。该函数旨在返回上一个列表的两个连续元素之和,直到只剩下两个元素。我打算使用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
答案 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)