我有一个如下所示的python2D数组:
array = [('aaa', 20), ('bbb', 30), ('ccc', 40), ('ddd', 50)]
我想根据每个集合中的第二个值来筛选此数组。例如,我只想保留第第二项>=40的项
预期产量:
filtered_array = [('ccc', 40), ('ddd', 50)]
我可以用循环来实现这一点,但是有没有一种优雅的方法来过滤它呢?
nhjlsmyf1#
您可以使用filter,但在幕后,它仍然使用循环,因为除此之外还有什么方法呢?
filter
list(filter(lambda x: x[1] >= 40, array)) # [('ccc', 40), ('ddd', 50)]
或者,您可以使用itertools.filterfalse(带有相同的脚注):
itertools.filterfalse
list(itertools.filterfalse(lambda x: x[1] < 40, array)) # [('ccc', 40), ('ddd', 50)]
ut6juiuv2#
最清楚的:
[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)))
2条答案
按热度按时间nhjlsmyf1#
您可以使用
filter
,但在幕后,它仍然使用循环,因为除此之外还有什么方法呢?或者,您可以使用
itertools.filterfalse
(带有相同的脚注):ut6juiuv2#
最清楚的:
不太清楚的是:
在Python级别没有循环: