【发布时间】:2011-12-23 15:50:28
【问题描述】:
我想知道,Python 中是否有办法在不创建新集合的情况下修改集合。例如:
lst = [1, 2, 3, 4, 5, 6]
new_lst = [i for i in lst if i > 3]
工作正常,但创建了一个新集合。是否有原因,Python 集合缺少 filter() 方法(或类似方法)来修改集合对象?
【问题讨论】:
-
如果你真的,绝对必须修改它,为什么不检查每个值,然后弹出(i)你不喜欢的那些?
-
关于其他方法的“缺乏”,这是因为在 Python 中“应该有一种——最好只有一种——明显的方式来做到这一点。”下面答案中的列表切片操作是进行就地修改的首选方式。它应该自然正交,因为 lst[index] 访问单个元素, lst[start:stop] 访问元素的跨度/切片。
-
BasicWolf 事实上你是对的:据我所知,没有方法或函数可以处理就地转换以及“为什么会这样?”的问题。已验证。可以编写进行此类转换的 sn-ps 的事实并不是一个合理的理由,否则我们可以编写自己的 sn-ps 来进行序列反转以证明不会反转就足够了( ) 作为内置函数。但是内置功能中有 reversed() ......我赞成,因为你的问题看起来像是令人兴奋的反思。
-
@eyquem 我认为原因很简单。由于它们不是就地过滤 Python
list的有效方法,因此没有提供这样做的方法——它会鼓励人们尝试在最好不要就地进行操作。然而,有一种非常有效的方式来反向迭代它,因此提供了一个解决方案。 -
仍然有很多无序的集合。例如。过滤
set或dict。
标签: python collections