如何检查包含多个子列表的列表上的几个条件?

时间:2019-04-17 21:46:47

标签: python for-loop if-statement conditional-statements

我有一个如下列表:

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。 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

退回代码,尝试用文字更详细地描述这些步骤。例如,根据您对问题的了解,您可以像这样开始:

  • 对于列表中的每对数字(x,y)
    • 如果y的实部为正,则...
    • 让xi是x的虚部,yi是y的虚部
    • 如果xi和yi的符号不同,那么...

请注意,我是如何翻译您作为段落编写的描述并将其格式化为看起来更像代码的。同时,我并不太担心python语法。我仍在使用单词,但尝试将这些单词转换为类似于我在python中编写代码的方式。您需要完成细节的充实,尤其是在我放置“ ...”的位置。然后,您将需要查看一些文档,以弄清楚如何获取复数的实部和虚部以及如何获取数字的正负号。

答案 1 :(得分:0)

这可行,但是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))]