1

我有这一系列字典

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

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

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

4

3 回答 3

8

不应该修改您正在迭代的集合。相反,使用列表推导

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

另外,让我们澄清另一件事。Python没有原生数组。它有清单。

于 2013-07-25T18:26:16.800 回答
1
[el for el in array if test_to_be_preserved(el)]

应该保留返回iftest_to_be_preserved的函数在哪里,如果应该从TrueelFalseelarray

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

  i = 0
  while i < len(array):
    el = array[i]
    if should_remove(el):
        array[i] = array.pop()
    else:
        i += 1
于 2013-07-25T18:25:36.403 回答
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]
于 2013-07-25T19:59:05.170 回答