Possible Duplicate:
Remove items from a list while iterating in Python
我正试图从python的列表中删除一个项:
x = ["ok", "jj", "uy", "poooo", "fren"]
for item in x:
if len(item) != 2:
print "length of %s is: %s" %(item, len(item))
x.remove(item)
但它不会删除"fren"
项。有什么想法吗?
Tags:
在列表上迭代时,不能从列表中删除项。在旧列表的基础上创建新列表要容易得多:
hymloth和sven的答案有效,但它们不会修改列表(创建一个新的列表)。如果需要修改对象,则需要指定给切片:
但是,对于需要删除很少元素的大型列表,这会占用内存,但它在O(n)中运行。
glglgl的答案具有O(n)复杂性,因为
list.remove
是O(n)。根据数据的结构,您可能更喜欢注意要删除的元素的索引,并使用
del
键按索引删除:现在
del x[i]
也是O(n),因为您需要复制索引i
(列表是一个向量)之后的所有元素,所以您需要根据您的数据测试它。不过,这应该比使用remove
更快,因为您不支付remove的搜索步骤的成本,而且在这两种情况下,复制步骤的成本都是相同的。[编辑]非常好的地方,O(n)版本的有限内存要求,由@Sven Marnach提供。它使用了python 2.7中引入的^{} :
相关问题 更多 >
编程相关推荐