我有一个python 2D数组,如下所示:
array = [('aaa', 20), ('bbb', 30), ('ccc', 40), ('ddd', 50)]
我想根据每组中的第二个值来过滤这个数组。例如,我只想保留具有第二项>=40
预期输出:
filtered_array = [('ccc', 40), ('ddd', 50)]
我可以通过循环来实现这一点,但有没有一种优雅的过滤方式?
您可以使用filter
,但在引擎盖下,它仍然使用循环,因为还有其他方法吗?
list(filter(lambda x: x[1] >= 40, array))
#[('ccc', 40), ('ddd', 50)]
或者您可以使用itertools.filterfalse
(带有相同的脚注(:
list(itertools.filterfalse(lambda x: x[1] < 40, array))
#[('ccc', 40), ('ddd', 50)]
清除:
[x for x in xs if x[1] >= 40]
不太清楚:
list(filter(lambda x: x[1] >= 40, xs))
Python级别没有循环:
def f(xs):
try:
x = next(xs)
except StopIteration:
return
if x[1] >= 40:
yield x
yield from f(xs)
list(f(iter(xs)))