首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否仅删除给定列表中的元素?

是否仅删除给定列表中的元素?
EN

Stack Overflow用户
提问于 2013-05-24 03:50:23
回答 3查看 81关注 0票数 4

这方面的新知识:在不绑定两个列表中的元素的情况下,将元素从一个列表复制到另一个列表的最佳方法是什么?例如:

代码语言:javascript
复制
A=[[6,2,-1],[9,-2,3]]
B=A[0]
del B[0]

我还会将A设置为[[2,-1],[9,-2,3]],即使我希望A保持不变。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-24 04:00:00

问题是,通过这样做

代码语言:javascript
复制
B=A[0]

您只需再次引用A列表即可

您可能想要复制该列表,如下所示

代码语言:javascript
复制
B=list(A[0])

如果case list还包含需要复制的对象,则需要深入复制整个列表

代码语言:javascript
复制
import copy
B = copy.deepcopy(A[0])

但是对于整数,你不需要这样做

票数 3
EN

Stack Overflow用户

发布于 2013-05-24 04:04:29

您的代码使B仅仅是对A中第一个项目的引用。这是一个问题,因为A中的第一项是一个可变对象,即一个列表。您要做的是将A[0]的元素复制到一个名为B的新列表中

代码语言:javascript
复制
b = a[0][:] # lowercase variable names according to PEP8

请注意,这仍然只对a[0]中的项进行shallow copies。这将适用于您的情况,因为您已经说过这些元素是数字的,这意味着它们是不可变的。但是,如果a[0]或其他可变对象中包含了更多的嵌套列表,而不是数字,那么以后可能会出现相同的问题,再往下一层。只需小心注意哪些地方需要全新的对象,哪些地方引用是足够的。

票数 3
EN

Stack Overflow用户

发布于 2013-05-24 03:59:28

B初始化为列表并使用.append()而不是=

代码语言:javascript
复制
A=[[6,2,-1],[9,-2,3]]
B = []
B.append(A[0])

有关更多详细信息,请参阅此post,但它的要点是使用=复制指向内存中列表的指针。而使用append确保被复制的是列表中包含的数据,而不是列表指针本身。

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

https://stackoverflow.com/questions/16722650

复制
相关文章

相似问题

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