Is there a simple way to delete a list element by value?
1 2 3 4 5 | a = [1, 2, 3, 4] b = a.index(6) del a[b] print a |
上述显示以下错误:
1 2 3 4 | 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 |
所以我要这样做:
1 2 3 4 5 6 7 8 9 | a = [1, 2, 3, 4] try: b = a.index(6) del a[b] except: pass print a |
但有不simpler的路吗?
要删除元素在列表中的第一次出现,只需使用
1 2 3 4 | >>> a = ['a', 'b', 'c', 'd'] >>> a.remove('b') >>> print a ['a', 'c', 'd'] |
请注意,它不会删除元素的所有引用。使用列表理解。
1 2 3 4 | >>> a = [10, 20, 30, 40, 20, 30, 40, 20, 70, 20] >>> a = [x for x in a if x != 20] >>> print a [10, 30, 40, 30, 40, 70] |
通常,如果您告诉Python做一些它不能做的事情,那么它会抛出一个异常,因此您必须做以下任一项:
1 2 | if c in a: a.remove(c) |
或:
1 2 3 4 | try: a.remove(c) except ValueError: pass |
一个例外不一定是一件坏事,只要它是一个你期待和妥善处理。
你可以做到
1 2 3 | a=[1,2,3,4] if 6 in a: a.remove(6) |
但是上面需要在列表A中搜索6两次,所以尝试except会更快
1 2 3 4 | try: a.remove(6) except: pass |
考虑:
1 | a = [1,2,2,3,4,5] |
要除去所有出现的情况,可以在Python中使用filter函数。例如,它看起来像:
1 | a = list(filter(lambda x: x!= 2, a)) |
所以,它将保留a的所有元素!= 2。
只取出其中一件物品
1 | a.remove(2) |
以下是如何就地执行(不理解列表):
1 2 3 4 5 6 7 | def remove_all(seq, value): pos = 0 for item in seq: if item != value: seq[pos] = item pos += 1 del seq[pos:] |
如果你知道要删除什么值,这里有一个简单的方法(不管怎样,只要我能想到简单的方法):
1 2 3 | a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4] while a.count(1) > 0: a.remove(1) |
你会得到
另一种可能是使用集合而不是列表(如果集合适用于应用程序)。
如果您的数据没有排序,并且没有重复的数据,那么
1 2 | my_set=set([3,4,2]) my_set.discard(1) |
是无错误的。
通常列表只是一个方便的容器,用于存放实际无序的项目。有一些问题询问如何从列表中删除元素的所有出现。如果你一开始不想被骗,那么再一次用一套就很方便了。
1 | my_set.add(3) |
不会从上面改变我的设置。
如许多其他答案所述,
1 2 3 | from contextlib import suppress with suppress(ValueError): a.remove('b') |
只需使用list的remove方法,就可以轻松地在列表中查找值,然后删除该索引(如果存在的话):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> 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] |
如果经常这样做,您可以将其包装在一个函数中:
1 2 3 4 5 | def remove_if_exists(L, value): try: L.remove(value) except ValueError: pass |
此示例很快,将从列表中删除某个值的所有实例:
1 2 3 4 5 6 7 8 | a = [1,2,3,1,2,3,4] while True: try: a.remove(3) except: break print a >>> [1, 2, 1, 2, 4] |
如果元素是不同的,那么一个简单的集合差异就可以了。
1 2 3 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] |
在一行中:
1 | a.remove('b') if 'b' in a else None |
有时有用
通过索引除要删除的元素之外的所有内容来覆盖列表
1 2 3 | >>> s = [5,4,3,2,1] >>> s[0:2] + s[3:] [5, 4, 2, 1] |
我们也可以使用.pop:
1 2 3 4 5 6 7 8 9 | >>> 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循环和条件:
1 2 3 4 5 6 | def cleaner(seq, value): temp = [] for number in seq: if number != value: temp.append(number) return temp |
如果你想删除一些,但不是全部:
1 2 3 4 5 6 7 8 9 | def cleaner(seq, value, occ): temp = [] for number in seq: if number == value and occ: occ -= 1 continue else: temp.append(number) return temp |
1 2 3 4 5 | 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。下面是我将如何处理的:
1 | x = [1, 2, 3, 1, 2, 3] |
现在,这是我的方法的一个实际应用:
1 2 3 4 5 | def Function(List, Unwanted): [List.remove(Unwanted) for Item in range(List.count(Unwanted))] return List x = Function(x, 1) print(x) |
这是我一行的方法:
1 2 | [x.remove(1) for Item in range(x.count(1))] print(x) |
两者都将其作为输出:
1 | [2, 3, 2, 3, 2, 3] |
希望这有帮助。ps,请注意,这是在3.6.2版中编写的,因此您可能需要对它进行调整以适应旧版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | arr = [1, 1, 3, 4, 5, 2, 4, 3] # to remove first occurence of that element, suppose 3 in this example arr.remove(3) # to remove all occurences of that element, again suppose 3 # use something called list comprehension new_arr = [element for element in arr if element!=3] # if you want to delete a position use"pop" function, suppose # position 4 # the pop function also returns a value removed_element = arr.pop(4) # u can also use"del" to delete a position del arr[4] |
也许你的解决方案可以与ints一起使用,但它不适用于我的字典。
一方面,remove()对我不起作用。但它可能适用于基本类型。我想下面的代码也是从对象列表中删除项目的方法。
另一方面,"del"也没有正常工作。在我的例子中,使用python 3.6:当我尝试用del命令从"for"bucle的列表中删除元素时,python会更改进程中的索引,bucle会在时间到来之前提前停止。它只在按元素相反的顺序删除元素时起作用。通过这种方式,您在浏览挂起元素数组索引时不会更改它。
然后,IM使用:
1 2 3 4 5 6 | c = len(list)-1 for element in (reversed(list)): if condition(element): del list[c] c -= 1 print(list) |
其中"list"类似于['key1':value1','key2':value2,'key3':value3,…]
你也可以用Enumerate做更多的Python:
1 2 3 4 | for i, element in enumerate(reversed(list)): if condition(element): del list[(i+1)*-1] print(list) |
语法:
例如:
1 2 3 4 5 6 | lst = ['one', 'two', 'three', 'four', 'two'] lst.remove('two') #it will remove first occurence of 'two' in a given list del lst[2] #delete item by index value print(lst) |
这将从数组
1 2 | while"-v" in sys.argv: sys.argv.remove('-v') |
您可以在名为
1 2 3 4 5 6 7 8 9 10 11 | $ 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'] |
对。这是我发现最有用的:
1 2 3 4 5 6 7 8 9 10 11 | import sys a = [1, 2, 3, 4] y = 0 if y < 1: a.remove(1) print len(a) else: sys.exit() |
现在,