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中的意思不同你的问题是什么?我想知道是否有一种方法可以循环我的求和函数,直到没有更多的元素可以添加。