列出'减'项目

时间:2014-01-04 13:42:24

标签: python python-3.x

就像你可以写

一样
L + [item]

以复制列表的形式将一个项目添加到列表中,你可以做一个类似的事情但是减法为

L - [item]

不起作用?

5 个答案:

答案 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]

应该可以正常工作

我不建议您使用dellist.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)