这个for圈子无法删除列表中的所有相同元素,我不知道为什么

时间:2018-12-14 09:32:33

标签: python-3.x list for-loop

a = [1, 2, 2]
value = 2 
for i in a:
 if i == value:
    a.remove(i)

我要删除列表中的2个相同元素。但是结果告诉我,我只是删除其中之一。当我调试它时,我发现它只能循环2次,而不是我希望的3次。

2 个答案:

答案 0 :(得分:0)

这里您不必使用比较即可从列表中删除某个值

这是对您的代码的一些修改:

a = [1, 2, 2]
value = 2

try:
    for i in a: a.remove (value)
except ValueError: pass

print (a)

无论何时remove ()函数找不到您要查找的值,它都会引发值错误:ValueError: list.remove(x): x not in list。要消除这种情况,请尝试尝试将其包围。这样就可以了。

但是,有更多更简便的方法可以使用remove ()函数。例如,您可以使用while循环。

看下面的代码:

a = [1, 2, 2]
value = 2

while value in a:
    a.remove (value)

print (a)

它容易得多。

答案 1 :(得分:0)

您可以将简单的list comprehension用于 1行解决方案:

import numpy as np
import matplotlib.pyplot as plt

time_samples = np.arange(17000)
force_samples = np.arange(17000)

plt.plot(time_samples,force_samples)
plt.show()

time_samples2 = np.random.rand(1,1000)
force_samples2 = np.random.rand(1,1000)

plt.plot(time_samples2,force_samples2)
plt.show()

您可以将以上内容写为:

In [2764]: a = [1, 2, 2]
In [2755]: value = 2

In [2768]: a = [i for i in a if i != value]

In [2769]: a
Out[2769]: [1]

或者,您也可以使用filter删除所有出现的内容:

Python-2

ans = []
for i in a:
    if i <> value:
    ans.append(i)

Python-3

In [2778]: filter(lambda x: x!= value, a)
Out[2778]: [1]