是否可以在函数外更改列表?

2024-09-28 17:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的教授分配了一个项目,在这个项目中我们对一个列表进行了一系列的修改。我们的主要功能如下:

CURRENT_LIST = [1,2,3,4,5]

def main():
    data = list(CURRENT_LIST)
    shiftRight(data)
    print("After shifting data", data)

基本上,我们必须编写函数来处理main()正在调用的这些函数。我了解如何编写函数。例如,将所有内容向右移动会产生如下结果:

def shiftRight(data:list) -> (list):
     data = data[-1:] + data[:-1]
     return(data)

我的问题是:有没有可能在不改变提供给我们的main()函数的情况下做到这一点?据我所知,在调用shiftRight()之后,我必须再次将其分配给列表。比如:

   data = shiftRight(data)

但我们所拥有的主要功能并不是这样设置的。我想知道是否可以在不修改main()函数的情况下重新分配data列表。我也希望避免使用全局变量,因为我不认为这是我教授的意图。你知道吗

他有没有在提供给我们的main()中犯错误?或者真的有办法不使用global variables和不修改main()来修改这个列表吗?你知道吗


Tags: 项目函数功能列表datamaindef情况
2条回答

您可以修改列表的内容,这将更新由变量指针指向的原始列表,而不是创建新列表:

>>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def shiftRight(l):
...     l[:] = l[-1:] + l[:-1]
... 
>>> shiftRight(l)
>>> l
[9, 0, 1, 2, 3, 4, 5, 6, 7, 8]

main函数查看CURRENT_LIST,生成它的副本,然后调用该副本data。然后它将data传递给名为shiftRight的函数,该函数接受一个列表并对该列表执行右移。此函数原地改变列表并返回None(如果省略return语句,则默认情况下会发生这种情况)。然后main打印结果。你知道吗

你的def shiftRight...应该放在main函数之外,就在CURRENT_LIST赋值之后。您还需要调整shiftRight函数来改变传递的列表,而不是创建并返回一个新的列表。为此,请尝试popinsert列表方法。你知道吗

相关问题 更多 >