我有这一系列字典
for row in array:
if row['val'] < 11:
array.pop(array.index(row))
如果其中一个值低于某个阈值,我试图从数组中删除字典。它有效,但仅适用于数组中的一项
我现在的解决方案是运行 for 语句两次,然后删除额外的值。我该怎么办?
您不应该修改您正在迭代的集合。相反,使用列表推导:
array = [row for row in array if row['val'] >= 11]
另外,让我们澄清另一件事。Python没有原生数组。它有清单。
[el for el in array if test_to_be_preserved(el)]
应该保留返回iftest_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
您可以使用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]