首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在保留原始列表的同时传递列表

在保留原始列表的同时传递列表
EN

Stack Overflow用户
提问于 2008-10-22 22:38:49
回答 7查看 384关注 0票数 12

所以我在自学Python,我对列表有个问题。我想向我的函数传递一个列表,并在保留原始列表的同时弹出其中的项目。我如何使python "instance“成为传递的列表,而不是传递一个指向原始列表的指针?

示例:

代码语言:javascript
运行
复制
def burninate(b):
    c = []
    for i in range(3):
        c.append(b.pop())
    return c

a = range(6)
d = burninate(a)
print a, d

输出: 0,1,2

期望输出: 0,1,2,3,4,5

谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-10-22 23:00:38

正如其他答案所建议的那样,您可以向您的函数提供列表的副本。

另一种方法是,您的函数可以获取参数的副本:

代码语言:javascript
运行
复制
def burninate(b):
    c = []
    b = list(b)
    for i in range(3):
        c.append(b.pop())
    return c

基本上,你需要在你的头脑中(和你的文档中)清楚你的函数是否会改变它的参数。在我看来,返回计算值的函数不应更改其参数,而更改其参数的函数不应返回任何内容。参见python的[].sort(),[].extend(),{}.update()等。显然,也有例外(比如.pop())。

此外,根据您的特定情况,您可以重写函数以避免使用pop()或其他修改参数的函数。例如:

代码语言:javascript
运行
复制
def burninante(b):
    return b[:-4:-1]   # return the last three elements in reverse order
票数 14
EN

Stack Overflow用户

发布于 2008-10-22 22:42:33

您可以使用列表的副本调用burninate(),如下所示:

d = burninate(a[:])

或,

d = burninate(list(a))

另一种方法是在您的方法中创建列表的副本:

代码语言:javascript
运行
复制
def burninate(b):
    c=[]
    b=b[:]
    for i in range(3):
        c.append(b.pop())
    return c

>>> a = range(6)
>>> b = burninate(a)
>>> print a, b
>>> [0, 1, 2, 3, 4, 5] [5, 4, 3]
票数 10
EN

Stack Overflow用户

发布于 2008-10-22 22:45:14

要做同样的事情,一种更具可读性的方法是:

代码语言:javascript
运行
复制
d = burninate(list(a))

在这里,list()构造函数基于a创建一个新列表。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/227790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档