从列表中删除奇数

时间:2019-08-29 06:49:49

标签: python-2.7

我有一个普遍的疑问,因为我的逻辑看似正确,但仍然给我错误的结果。我需要了解,为什么这种逻辑无法顺利进行。

问题很简单,请不要以此为基础来判断我,而且我是python的新手。这就是问题

要从提供的列表中删除奇数

我的代码:

def purify(lst):
  for ele in lst:
    if ele % 2 != 0:
      lst.remove(ele)
  return lst

print purify([4, 5, 3, 4])

输出[4,3,4]为什么????

我了解remove(),我已经读过它,对于这个结果,[1,2,3],它可以打印正确的结果,但是对于某些输入,它就像是疯了一样。

给出的一般答案是make a new list and append it to the new list based upon the check whether the elem%2 == 0 and return it

但是我的问题是,为什么我的代码不起作用?这里的逻辑出了什么问题?在此先感谢:)

2 个答案:

答案 0 :(得分:1)

问题是当您发现5号奇数时您正在循环,然后将其删除但循环尚未完成。然后从该循环中删除,因此,下次对其进行迭代时,将跳过数字3。

如果只打印它:

def purify(lst):
  for ele in lst:
    print(ele)
    if ele % 2 != 0:
      lst.remove(ele)
  return lst

print purify([4, 5, 3, 4])

值是:

4
5
4
[4, 3, 4]

那么,迭代中的3号在哪里?

答案 1 :(得分:1)

这是通过numpy数组进行处理的矢量化方法,

SELECT
    *
FROM
    mytable
WHERE substring(col, 4, 1) ~ '[0-9]'