就像你可以写
一样L + [item]
以复制列表的形式将一个项目添加到列表中,你可以做一个类似的事情但是减法为
L - [item]
不起作用?
答案 0 :(得分:3)
由于L + [item]
创建新列表,要创建删除项目的新列表,请使用列表理解:
L = [value for value in L if value != item]
这会删除L
中等于item
的所有值。要删除最后一个元素,请使用切片:
L = L[:-1]
创建一个没有最后一个索引的新列表。
使用del L[index]
或L.remove(item)
会从列表就地中删除值,这与L + [item]
不完全相同。
答案 1 :(得分:2)
要按值删除元素,请使用L.remove(x)
。这可以就地修改集合。
要按索引删除,请执行del L[i]
(再次,就地修改)。
如果它是您所追求的减法语法,可以使用set
来完成(将创建并返回一个新集合):
set([1,6,9]) - set([6])
答案 2 :(得分:2)
您可以使用list.remove(element)从列表中删除元素(docs):
x = [1,2,3]
x.remove(3)
print(x) # [1,2]
答案 3 :(得分:1)
因为只有当列表以相同的子列表结束时才会有意义(如果您希望L - [item]
应该从列表末尾删除该项,那么与L + [item]
相同的方式会添加一个项目结束。)。
L[:-1]
应该可以正常工作
我不建议您使用del
或list.remove
,因为它会修改列表,而您的示例会创建一个新列表。
答案 4 :(得分:0)
如果你想要一个带减法运算符的列表,你可以轻松编写它:
class SubtractableList(list):
"""A list that supports the subtraction operator.
For example:
>>> l = SubtractableList([1, 2, 3])
>>> l - [3]
[1, 2]
>>> l -= [2]
>>> SubtractableList(range(5)) - l
[0, 2, 4]
"""
def __sub__(self, other):
try:
other = set(other)
except TypeError: # some item in other is not hashable
pass # so fall back to quadratic algorithm
return type(self)(item for item in self if item not in other)