这是我的代码:从Python列表中删除每个值的某个值?
a = [1,2,3,43,43,43]
count = a.count(43)
if count > 0:
for i in range(count):
a.remove(43)
print a
有没有一种简单的方法来实现这一目标?
这是我的代码:从Python列表中删除每个值的某个值?
a = [1,2,3,43,43,43]
count = a.count(43)
if count > 0:
for i in range(count):
a.remove(43)
print a
有没有一种简单的方法来实现这一目标?
尝试
a = [x for x in a if x != 43]
尝试itertools
:
>>> import itertools
>>> a = [1, 2, 3, 43, 43, 45]
>>> iter = itertools.ifilter(lambda x: x != 43, a)
>>> list(iter)
[1, 2, 3]
通常,列表理解和生成器表达式更好。 – minhee 2011-04-11 06:36:08
是的,我同意:) – 2011-04-11 06:37:04
'itertools'是建立在标准生成器工具上的一组不错的工具。这是非常有用的,但我认为这个具体问题有点矫枉过正。 – 2011-04-11 06:39:03
是你只想删除列表中的所有a
43S什么?
a = [x for x in a if x != 43]
那里有小字谜吗?它不应该是'[x for a ...而不是'[a for a x in a ...']吗? – 2011-04-11 06:37:40
是的,你是对的。我编辑过。 – minhee 2011-04-11 06:41:33
请注意,上述所有的解决方案(除了一个用删除,而是一个具有非线性执行时间)将创建一个新的列表,而不是修改原来的到位。这可能会或可能不会成为你的情况的问题。如果要修改原始列表,则必须使用切片分配,例如:
a[:] = [value for value in a if value != 43]
这里为什么需要分片分配? – 2011-04-11 22:07:04
正如我在代码上面的注释中所说的那样,这是如果您想要修改原始列表。如果列表作为函数中的参数传递,并且您希望该函数具有修改调用程序所看到的列表的副作用,这可能很重要。 – 2011-04-12 12:40:59
+1啊,好榜样! – 2011-04-13 05:44:05
这也不是一个很好的算法。每次你执行'a.remove(43)'时,Python都会从列表的开头再次开始,所以你一遍又一遍地测试值[1,2,3]。在大O标记中,这是O(n^2)。下面使用简单的列表理解的答案是O(n) – 2011-04-11 07:01:50