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



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

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

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

首先,我给出一个列表作为我所做的函数之一的参数,删除函数。删除函数删除元素,直到它只有一个元素使用另一个函数。在该函数中,我放入了我的另一个函数(我将调用此检查函数(。检查函数检查要删除的元素,并且"实际上"删除了我的代码中的一个元素,但什么也没返回。

请注意 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'])

我测试了检查功能是否运行良好,因此,我认为这是删除功能的问题。

我希望每次传递"remove"函数时都会修改列表 seq 并最终返回最后一个元素,但没有任何变化并陷入无限循环。

感谢您阅读我的问题。

>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]

最新更新