我有这个词典数组
for row in array:
if row['val'] < 11:
array.pop(array.index(row))
如果其中一个值低于某个阈值,我试图从数组中删除字典。它可以工作,但仅适用于数组中的一个项目
我现在的解决方案是运行两次for语句,然后删除额外的值。我应该怎么做呢?
答案 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
应该省略,则返回el
,False
如果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]