删除列表中的某些元素

时间:2013-01-29 14:59:41

标签: python list range

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

3 个答案:

答案 0 :(得分: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缺失了。不确定你是否希望这种情况发生,所以请记住这一点。

另外......你的问题可能会收到如此多的投票,因为这里的文化鼓励用户尝试思考问题,而不仅仅是要求解决方案。起初我自己并不理解这一点,有时我的问题被低估了。不要气馁,我们在这里提供帮助,试着向我们展示你将来提出问题时所取得的进展(例子)。

答案 1 :(得分:2)

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 :(得分:1)

你可以这样做(如果是索引):

>>> 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的倍数,因此在任何一种情况下都会删除它。