【问题标题】:Deleting certain elements in a list [closed]删除列表中的某些元素[关闭]
【发布时间】:2013-01-13 04:43:42
【问题描述】:

所以我想删除列表中所有 2 的倍数。我该怎么做?但是还有另一个问题,如果我想删除所有 3 的倍数,例如 6 会发生什么?

【问题讨论】:

  • 你读过列表中的 python 文档吗?如果是这样,请向我们展示您失败的努力。
  • 你能显示一些代码吗?

标签: python list range


【解决方案1】:
a = range(10)
a = filter(lambda n: n%2 != 0, a)

它会给你 [1、3、5、7、9]

如您所见,不再有六个(任何六个的倍数都会发生同样的情况)

那么,如果你删除三的倍数

a = filter(lambda n: n%3 != 0, a)

a 将是 [1, 2, 4, 5, 7, 8]

【讨论】:

    【解决方案2】:

    要删除列表中 2 或 3 的所有倍数,您可能需要执行列表推导式,在该条件下,您可以过滤掉可以被您要查找的任何倍数整除的整数。如果您发布了代码示例,我可能会为您提供更好的帮助,但根据您的问题,我建议以下...

    nums = [0,1,2,3,4,5,6,7,8]
    
    no_mult_of_2 = [ x for x in nums if x%2 != 0 ]
    no_mult_of_3 = [ x for x in nums if x%3 != 0 ]
    
    print no_mult_of_2
    print no_mult_of_3
    

    打印....

    [1, 3, 5, 7]
    [1, 2, 4, 5, 7, 8]
    

    如您所见,6 在这两种情况下都消失了,因为它是 2 和 3 的倍数。注意 0 丢失了。不确定您是否希望发生这种情况,因此请记住这一点。

    另外...您的问题可能会收到很多反对票,因为这里的文化鼓励用户尝试思考问题,而不仅仅是寻求解决方案。起初我自己并不理解这一点,有几次我的问题被否决了。不过不要气馁,我们随时为您提供帮助,您可以在以后提出问题时向我们展示您取得的进展(示例)。

    【讨论】:

      【解决方案3】:

      您可以这样做(如果按索引):

      >>> l=range(100)
      >>> l[:]=[e for i,e in enumerate(l) if i%2]
      

      或者如果它是列表元素值的倍数:

      >>> l=range(100)
      >>> l[:]=[e for e in l if e%2]
      

      使用e(或i% 3 表示 3 的倍数。由于 6 是 2 或 3 的倍数,因此无论哪种情况都将被删除。

      【讨论】:

      • 我认为他的意思是列表中的多个实际值而不是元素索引。
      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多