我有一个如下列表:
mylist = [((-1), (2)) ,((-3-4j), (5-6j)), ((-3+4j), (5+6j)), ((-7-8j), (-9-10j)), ((-7+8j), (-9+10j)), ((-11-12j), (13+14j)), ((-11+12j), (13+14j))]
我要检查此列表上的两个条件。
例如,对于第二个元素(((-3-4j),(5-6j)),我要检查5-6j的实部是否为正,而(-3-4j)的虚部是否为正和(5-6j)不同,那么我想知道列表中该元素的数量。
第一个元素由两个实数组成,并且由于2为正数,因此第一个元素满足条件。
如您所见,只有第一个元素和最后两个元素满足条件。
我已经根据发现的内容编写了代码,但它仅检查每个元素第二个数字的实部。
violates = [i for i, a in enumerate(mylist) if any([aa.real > 0 for aa in a])]
print ("violates=", violates)
根据条件,输出必须为0、5和6。
谢谢你的帮助。
最佳答案
这可行,但是6不是有效的情况。两个虚部具有相同的符号。
sign = lambda x: x and (1, -1)[x < 0]
violates = [(i,a) for i, a in enumerate(mylist) if (((a[0].real > 0) | (a[1].real > 0)) & ((sign(a[0].imag) + sign(a[1].imag))==0))]