Python 使用函数迭代处理列表
我有一个列表,它根据函数的结果而变化。该函数用于返回前一个列表中两个连续元素的总和,直到只剩下两个元素为止。我计划使用Python 使用函数迭代处理列表,python,python-3.x,list,Python,Python 3.x,List,我有一个列表,它根据函数的结果而变化。该函数用于返回前一个列表中两个连续元素的总和,直到只剩下两个元素为止。我计划使用for循环来获取总和,但找不到正确的语法来使代码正常工作。有没有一个简单的方法可以做到这一点 这是我获取数组中两个连续元素之和的代码,但我不太明白如何循环它: def pairSum(lst, n): sum = 0 for i in range(len(lst) - 1): sum = lst[i] + lst[i + 1] # Get the
for
循环来获取总和,但找不到正确的语法来使代码正常工作。有没有一个简单的方法可以做到这一点
这是我获取数组中两个连续元素之和的代码,但我不太明白如何循环它:
def pairSum(lst, n):
sum = 0
for i in range(len(lst) - 1):
sum = lst[i] + lst[i + 1] # Get the list of two consecutive elements in the array
y = (sum % 10) # Get only the units digit of the sum, which happens to be the sum modulus 10, or remainder
print(y)
x = [1, 0, 0, 2, 0, 2, 0, 2]
arr = x
size = len(arr)
pairSum(arr, size)
函数通常应该返回值,而不是打印结果。当然,除非这个函数的任务是打印。在您的例子中,这意味着您需要将计算的总和累加到一个列表中。另一个小问题是,您不需要传递列表的大小。列表对象中已经编码了该信息。把这些碎片放在一起,你就会
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)
这是一个列表,不是数组。这两个在python中的意思不同你的问题是什么?我想知道是否有一种方法可以循环我的求和函数,直到没有更多的元素可以添加。