numpy 基于第二元素的Python二维数组滤波

bis0qfac  于 2022-11-10  发布在  Python
关注(0)|答案(2)|浏览(175)

我有一个如下所示的python2D数组:

array = [('aaa', 20), ('bbb', 30), ('ccc', 40), ('ddd', 50)]

我想根据每个集合中的第二个值来筛选此数组。例如,我只想保留第第二项>=40的项

预期产量:

filtered_array =  [('ccc', 40), ('ddd', 50)]

我可以用循环来实现这一点,但是有没有一种优雅的方法来过滤它呢?

nhjlsmyf

nhjlsmyf1#

您可以使用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)]
ut6juiuv

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)))

相关问题