我想从列表中删除一个值,如果它存在于列表中(它可能不存在)。
a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
上面给出了错误:
ValueError: list.index(x): x not in list
所以我必须这样做:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
难道没有更简单的方法吗?
我想从列表中删除一个值,如果它存在于列表中(它可能不存在)。
a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
上面给出了错误:
ValueError: list.index(x): x not in list
所以我必须这样做:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
难道没有更简单的方法吗?
当前回答
你可以这样做
a=[1,2,3,4]
if 6 in a:
a.remove(6)
但以上需要在list a中搜索2次6,所以尝试except会更快
try:
a.remove(6)
except:
pass
其他回答
考虑:
a = [1,2,2,3,4,5]
要去除所有的事件,可以使用python中的filter函数。 例如,它看起来是这样的:
a = list(filter(lambda x: x!= 2, a))
因此,它将保留a != 2的所有元素。
只要拿出其中一项使用
a.remove(2)
这里的许多答案都涉及到创建一个新列表。这涉及到将所有数据从旧列表复制到新列表(删除的项除外)。如果你的清单很长,你可能负担不起(或者你不应该想要)。
在这些情况下,就地更改列表要快得多。如果你必须从列表中删除一个以上的元素,这可能会很棘手。假设您循环遍历列表,并删除了一个项,那么列表将更改,标准for循环将不考虑这一点。循环的结果可能不是您所期望的。
例子:
a = [0, 1, 2, 3, 4, 5]
for i in a:
a.remove(i) # Remove all items
print(a)
Out: [1, 3, 5]
一个简单的解决方案是以相反的顺序遍历列表。在这种情况下,你会得到:
a = [0, 1, 2, 3, 4, 5]
for i in reversed(a):
a.remove(i) # Remove all items
print(a)
Out: []
然后,如果你只需要删除一些特定值的元素,你可以简单地在循环中放入一个if语句,结果是:
a = [0, 1, 2, 3, 4, 5]
for i in reversed(a):
if i == 2 or i == 3: # Remove all items having value 2 or 3.
a.remove(i)
print(a)
Out: [0, 1, 4, 5]
在列表中查找一个值,然后删除该索引(如果它存在的话),使用list的remove方法更容易完成:
>>> a = [1, 2, 3, 4]
>>> try:
... a.remove(6)
... except ValueError:
... pass
...
>>> print a
[1, 2, 3, 4]
>>> try:
... a.remove(3)
... except ValueError:
... pass
...
>>> print a
[1, 2, 4]
如果你经常这样做,你可以把它包在一个函数中:
def remove_if_exists(L, value):
try:
L.remove(value)
except ValueError:
pass
这将从数组sys中删除"-v"的所有实例。Argv,如果没有找到实例,则不报错:
while "-v" in sys.argv:
sys.argv.remove('-v')
你可以在一个名为speechToText.py的文件中看到代码的运行:
$ python speechToText.py -v
['speechToText.py']
$ python speechToText.py -x
['speechToText.py', '-x']
$ python speechToText.py -v -v
['speechToText.py']
$ python speechToText.py -v -v -x
['speechToText.py', '-x']
通过索引除希望删除的元素之外的所有内容来覆盖列表
>>> s = [5,4,3,2,1]
>>> s[0:2] + s[3:]
[5, 4, 2, 1]
更普遍的是,
>>> s = [5,4,3,2,1]
>>> i = s.index(3)
>>> s[:i] + s[i+1:]
[5, 4, 2, 1]