如何使用无返回函数修改列表元素

How to modify the list elements with using no returning function

真的很抱歉我的英语不好,

我做了两个函数来不断修改(实际上是一个一个地删除)列表中的元素并在最后显示最后一个元素,但是删除函数对我要修改的列表没有影响.

我认为这是一个关于局部变量和列表可变性的问题,但我不知道如何解决它。

首先,我给出一个列表作为我创建的函数之一的参数,删除函数。移除函数移除元素,直到它只有一个元素使用其他函数。在该函数中,我将我的另一个函数(我将调用此检查函数)放入。检查函数检查要删除的元素,并且 'actually' 在我的代码中删除了一个元素,但 return 什么也没有。

请注意 x 和 y 变量是 seq 长度范围内的随机值(我没有在我的示例代码中写这个), 每次在删除函数的while循环中都会改变它们。

import random


def checking(x, y, seq):
    positions = [x, y]
    positions.sort()

    if seq[x] == 'b' and seq[y] == 'b':
        seq.pop(positions[1])
        seq.pop(positions[0])
        seq.append('a')
    else:
        seq.pop(positions[1])
        seq.pop(positions[0])
        seq.append('b')

def removing(seq):
    while len(seq) != 1:
        x, y = random1, random2
        remove(x, y, list(seq))
    return seq[0]

final(['a','a','b','a','b'])

我测试了检查功能,所以我认为这是删除功能的问题。

我希望列表 seq 每次通过 'remove' 函数都会修改,最后 return 最后一个元素,但没有任何改变并陷入无限循环。

感谢您阅读我的问题。

list(seq) 创建一个新列表实例,其中的项目是 seq 项目的浅表副本。

while 循环永远不会因此而终止,因为列表永远不会清空。

将相同的 seq 传递给 remove 函数,而不是创建新的列表实例。

remove(x, y, seq)

当给定参数是元组时,在进入循环之前将其转换为可变列表:

seqm = list(seq)
while len(seqm) != 1:
    x, y = random1, random2
    remove(x, y, seqm)
return seqm[0]