【问题标题】:Trying to remove multiples of the same number in Python尝试在Python中删除相同数字的倍数
【发布时间】:2013-09-27 01:09:03
【问题描述】:

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

【问题讨论】:

  • 你确定你的数据结构应该是一个列表而不是一个集合吗?你实际上需要用它做什么?
  • 按照我老师的说法,这就是她想要的。我们的类被称为 Set 但我们使用列表来做所有事情
  • 所以我决定不理会她告诉我们的内容,并把它做成了一套,因为你是对的,一套更有意义。不知道为什么她告诉我们要建立一个清单,下次在课堂上要问的问题>
  • 我认为它应该让您考虑实现细节——尽管如果是这样的话,比 Python 低一点的东西可能会更好。如果这门课很好,接下来的几个作业之一会让你用你自己写的哈希表重新实现它。

标签: python list class


【解决方案1】:

您可以使用内置的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

【讨论】:

    【解决方案2】:

    您可以使用list comprehension

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

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

    【讨论】:

      【解决方案3】:

      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]
      

      【讨论】:

        【解决方案4】:
        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
        

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

        【讨论】:

          【解决方案5】:
          def remove_element(self,integer):
              while integer in self.members:
                    self.members.remove(integer)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-06
            • 2020-03-15
            • 2021-01-02
            相关资源
            最近更新 更多