如果小于x,则弹出值

时间:2013-07-25 18:23:27

标签: python arrays

我有这个词典数组

for row in array:
        if row['val'] < 11:
            array.pop(array.index(row))

如果其中一个值低于某个阈值,我试图从数组中删除字典。它可以工作,但仅适用于数组中的一个项目

我现在的解决方案是运行两次for语句,然后删除额外的值。我应该怎么做呢?

3 个答案:

答案 0 :(得分:8)

shouldn't modify a collection that you're iterating over。相反,请使用list comprehension

array = [row for row in array if row['val'] >= 11]

另外,让我们澄清另一件事。 Python doesn't have native arrays。它有清单。

答案 1 :(得分:1)

[el for el in array if test_to_be_preserved(el)]

test_to_be_preserved是一个函数,如果True应该省略,则返回elFalse如果el应该从array中删除}

或者,如果您不介意更改原始数组中元素的顺序:

  i = 0
  while i < len(array):
    el = array[i]
    if should_remove(el):
        array[i] = array.pop()
    else:
        i += 1

答案 2 :(得分:0)

您可以使用filter()

>>> nums = [random.randint(1, 101) for x in xrange(20)]
>>> nums
[75, 101, 21, 69, 44, 98, 50, 45, 63, 73, 8, 44, 54, 42, 66, 68, 98, 56, 7, 36]
>>> (lambda x, l: filter(lambda y: y >= x, l))(25, nums)
[75, 101, 69, 44, 98, 50, 45, 63, 73, 44, 54, 42, 66, 68, 98, 56, 36]