有一个简单的方法来删除列表元素的值?
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
但是,有没有更简单的方法来做到这一点?
要在列表中删除元素的第一个匹配项,只需使用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()
只有一个参数,所以你只能从列表中删除一个整数。