2

我正在尝试从相同的列表中删除数字。因此,如果我有 1、2、3、4、5、3 并告诉它删除 3,它只会删除第一个(使用 .remove)给我 1、2、4、5、3。我现在知道 .remove 只应该删除第一个,所以我的问题是,我还能使用什么其他方法?我已经尝试过 .pop 和 del 但似乎都没有做所有这些(尽管我可能做错了)。我本来只是制作一个没有重复号码的新列表,但它意味着要通过我的老师驱动程序,所以我不能只是制作一个新列表(或者至少,我假设有更简单的方法?)以防万一有帮助,到目前为止,这是代码的一部分:

    def remove_element(self,integer):
        self.integer = integer
        self.members.remove(integer)
4

5 回答 5

2

您可以使用内置的filter,而不必为它编写方法:

>>> l = [1, 2, 3, 4, 5, 3]
>>> filter(lambda f: f != 3, l)
[1, 2, 4, 5]

在上面的代码中,我们定义了一个 lambda 函数lambda f: f != 3,它测试列表中的元素是否为 3。在您的情况下,您可能会使用self.integer替换3.

如果你不熟悉 lambda 函数,lambda f: f != 3相当于函数foo

>>> def foo(f):
...     return f != 3
于 2013-09-21T20:24:50.480 回答
1

列表理解,例如:

[x for x in a_list if x != integer]

因此,在您的情况下,它将是:

def remove_element(self,integer):
    self.integer = integer
    self.members = [elem for elem in self.members if elem != integer]
于 2013-09-21T20:26:03.703 回答
1
def without_element(l, element):
    return [item for item in l if item != element]

def remove_all(l, element):
    try:
        while True:
            l.remove(element)
    except ValueError:
        pass

第一个函数创建一个新列表,其中不包含您不想要的元素的任何副本。第二个从现有列表中删除所有副本。没有“删除所有副本”的方法;通常,如果您愿意,您使用的是错误的数据结构。你确定你应该使用列表吗?

于 2013-09-21T20:26:21.880 回答
1

您可以使用列表理解

>>> l = [1,2,3,4,5,3]
>>> 
>>> [i for i in l if i != 3]
[1, 2, 4, 5]

请记住,这实际上并没有修改l,而是创建了一个列表,因此请务必重新分配l给理解的结果。

于 2013-09-21T20:25:26.867 回答
0
def remove_element(self,integer):
    while integer in self.members:
          self.members.remove(integer)
于 2013-09-21T20:26:04.090 回答