检查列表中的条件,并准确找到违反条件的元素数量

时间:2019-01-31 00:31:57

标签: python list conditional-statements

我有一个如下列表:

A = [[-1 - 2*1j, -1 + 2*1j], [-5, -4], [7 - 9*1j, 7 + 9*1j], [9]]

我要检查所有元素是否都具有负实部。 在这种情况下,最后两个元素具有正实部。

如何确定违反条件的那些元素的编号? 在这种情况下,我想知道A[2]A [3]违反了条件。

2 个答案:

答案 0 :(得分:1)

假设您有一个函数 p ,该函数检查对象上的条件是对还是错(也称为谓词),以在列表 L 违反情况,您可以使用:

list(filter(not(p),L))

让我们将其应用于示例:

zs = [1 + 2j,5-3j,2,4j]

zs是复数的列表,顺便说一下,在python中,复数写为a + bj

print(list(filter(lambda z: z.real >= 0,zs)))

这将打印zs中具有正实部的元素。

P.S::我们使用lambda定义匿名函数,为了使代码更紧凑,您可以按传统方式定义函数并将其名称传递给过滤器。

答案 1 :(得分:1)

In [1]: A = [[-1 - 2*1j, -1 + 2*1j], [-5, -4], [7 - 9*1j, 7 + 9*1j], [9]]
In [2]: violates = [i for i, a in enumerate(A) if any([aa.real > 0 for aa in a])]
In [3]: violates
Out[3]: [2, 3]