【发布时间】:2013-01-13 04:43:42
【问题描述】:
所以我想删除列表中所有 2 的倍数。我该怎么做?但是还有另一个问题,如果我想删除所有 3 的倍数,例如 6 会发生什么?
【问题讨论】:
-
你读过列表中的 python 文档吗?如果是这样,请向我们展示您失败的努力。
-
你能显示一些代码吗?
所以我想删除列表中所有 2 的倍数。我该怎么做?但是还有另一个问题,如果我想删除所有 3 的倍数,例如 6 会发生什么?
【问题讨论】:
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 或 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 丢失了。不确定您是否希望发生这种情况,因此请记住这一点。
另外...您的问题可能会收到很多反对票,因为这里的文化鼓励用户尝试思考问题,而不仅仅是寻求解决方案。起初我自己并不理解这一点,有几次我的问题被否决了。不过不要气馁,我们随时为您提供帮助,您可以在以后提出问题时向我们展示您取得的进展(示例)。
【讨论】:
您可以这样做(如果按索引):
>>> 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 的倍数,因此无论哪种情况都将被删除。
【讨论】: