有一个简单的方法来删除列表元素的值?

a=[1,2,3,4] b=a.index(6) del a[b] print a 

以上显示了以下错误:

 Traceback (most recent call last): File "D:\zjm_code\a.py", line 6, in <module> b=a.index(6) 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 

但是,有没有更简单的方法来做到这一点?

17 Solutions collect form web for “有一个简单的方法来删除列表元素的值?”

要在列表中删除元素的第一个匹配项,只需使用list.remove

 >>> a = ['a', 'b', 'c', 'd'] >>> a.remove('b') >>> print a ['a', 'c', 'd'] 

请注意,它不会删除所有元素。 使用列表理解。

 >>> a = [1, 2, 3, 4, 2, 3, 4, 2, 7, 2] >>> a = [x for x in a if x != 2] >>> print a [1, 3, 4, 3, 4, 7] 

通常Python会抛出一个exception,如果你告诉它做不了的事情,所以你必须做:

 if c in a: a.remove(c) 

要么:

 try: a.remove(c) except ValueError: pass 

一个例外不一定是一件坏事,只要它是你正在期待和正确处理的。

你可以做

 a=[1,2,3,4] if 6 in a: a.remove(6) 

但上面需要在列表中search6次2次,所以尝试除了会更快

 try: a.remove(6) except: pass 

考虑:

 a = [1,2,2,3,4,5] 

要取出所有的事件,你可以在python中使用filter函数。 例如,它看起来像:

 a = list(filter(lambda x: x!= 2, a)) 

所以,它将保留!= 2的所有元素。

只要拿出其中的一个项目使用

 a.remove(2) 

这里是如何做到位(没有列表理解):

 def remove_all(seq, value): pos = 0 for item in seq: if item != value: seq[pos] = item pos += 1 del seq[pos:] 

如果你知道删除什么值,这里有一个简单的方法(无论如何我都能想到):

 a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4] while a.count(1) > 0: a.remove(1) 

你会得到[0, 0, 2, 3, 4]

在列表中查找值然后删除该索引(如果存在的话)只需使用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 

另一种可能是使用一个集合而不是一个列表,如果一个集合适用于你的应用程序。

IE如果你的数据没有sorting,那么没有重复

 my_set=set([3,4,2]) my_set.discard(1) 

是没有错误的。

一个列表通常只是一个方便的容器,实际上是无序的。 有问题询问如何从列表中删除所有元素的出现。 如果你不想受到愚蠢的话,那么一套又是好用的。

 my_set.add(3) 

不会从上面更改my_set。

这个例子很快,将从列表中删除一个值的所有实例:

 a = [1,2,3,1,2,3,4] while True: try: a.remove(3) except: break print a >>> [1, 2, 1, 2, 4] 

如果你的元素是独特的,那么一个简单的设置差异就可以了。

 c = [1,2,3,4,'x',8,6,7,'x',9,'x'] z = list(set(c) - set(['x'])) print z [1, 2, 3, 4, 6, 7, 8, 9] 

正如许多其他答案所述, list.remove()将工作,但如果该项目不在列表中,则抛出一个ValueError 。 用Python 3.4+,有一个有趣的方法来处理这个,使用抑制上下文pipe理器 :

 from contextlib import suppress with suppress(ValueError): a.remove('b') 

我们也可以使用.pop:

 >>> lst = [23,34,54,45] >>> remove_element = 23 >>> if remove_element in lst: ... lst.pop(lst.index(remove_element)) ... 23 >>> lst [34, 54, 45] >>> 

用for循环和条件:

 def cleaner(seq, value): temp = [] for number in seq: if number != value: temp.append(number) return temp 

如果你想删除一些,但不是全部:

 def cleaner(seq, value, occ): temp = [] for number in seq: if number == value and occ: occ -= 1 continue else: temp.append(number) return temp 

通过索引除希望删除的元素之外的所有内容来覆盖列表

 >>> s = [5,4,3,2,1] >>> s[0:2] + s[3:] [5, 4, 2, 1] 
  list1=[1,2,3,3,4,5,6,1,3,4,5] n=int(input('enter number')) while n in list1: list1.remove(n) print(list1) 

比方说,我们想从x中删除所有的1。 这是我将如何去做的:

 x = [1, 2, 3, 1, 2, 3] 

现在,这是我的方法的实际使用:

 def Function(List, Unwanted): [List.remove(Unwanted) for Item in range(List.count(Unwanted))] return List x = Function(x, 1) print(x) 

这是我的方法在一行:

 [x.remove(1) for Item in range(x.count(1))] print(x) 

这两个产出作为输出:

 [2, 3, 2, 3, 2, 3] 

希望这可以帮助。 PS,请注意,这是写在版本3.6.2,所以你可能需要调整旧版本。

是。 这是我发现最有用的:

 import sys a = [1, 2, 3, 4] y = 0 if y < 1: a.remove(1) print len(a) else: sys.exit() 

现在.remove()只有一个参数,所以你只能从列表中删除一个整数。

  • Django模板中的模量%
  • pandas:在excel文件中查找表单
  • 为什么string切片索引超出范围在Python中工作?
  • 如何获得Python类中的方法列表?
  • 如何在for循环中修改列表条目?
  • subprocess.Popen和os.system之间的区别
  • Python SciPy是否需要BLAS?
  • ImportError:matplotlib需要dateutil
  • Python 3中的相对导入无法正常工作
  • 如何离开/退出/停用python virtualenv?
  • 使用文件输出自动创build目录