我有一个如下列表:
A = [[-1 - 2*1j, -1 + 2*1j], [-5, -4], [7 - 9*1j, 7 + 9*1j], [9]]
我要检查所有元素是否都具有负实部。 在这种情况下,最后两个元素具有正实部。
如何确定违反条件的那些元素的编号?
在这种情况下,我想知道A[2]
和A [3]
违反了条件。
答案 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]