Python在过滤器内部减少

时间:2017-11-12 22:04:32

标签: python lambda sympy

我有一个列表,其中包含每个N坐标的M元组(N维)。 每个坐标都是一个表达式,我想只取实数点(所有坐标都是实数)。

我写了以下代码:

points = filter(lambda p: reduce(
    lambda c1, c2: c1.is_real and c2.is_real, p), points)

它不起作用(NameError: name 'reduce' is not defined)。我显然不完全理解这些类型的表达式是如何工作的,但我想要的东西相当于:

remove_points = []
for point in points:
    for coordinate in point:
        if not coordinate.is_real:
            remove_points.append(point)
            break
for point in remove_points:
    points.remove(point)

对我有用。任何人都可以指出我出错的地方以及应该如何解决?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个Python版本? reduce已移除list

不要将remove_points用于set,而是使用result = [point for point in points if all(coordinate.is_real for coordinate in point)] ,它会更快。

第二种方法有什么问题?但也许你也想考虑以下几点:

r0