试图在Python中删除相同数字的倍数

时间:2013-09-21 20:21:34

标签: python list class

我正在尝试从列表中删除相同的数字。因此,如果我有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)

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用list comprehension

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

请记住,这实际上并不会修改l,而是创建列表,因此请务必将l重新分配给理解结果。

答案 2 :(得分:1)

list comprehension,例如:

[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]

答案 3 :(得分: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

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

答案 4 :(得分:0)

def remove_element(self,integer):
    while integer in self.members:
          self.members.remove(integer)