Как я могу проверить несколько условий в списке, содержащем несколько подсписков? - PullRequest
1 голос
/ 18 апреля 2019

У меня есть список, как показано ниже:

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 ]

1 голос
/ 18 апреля 2019

Отойди от своего кода и постарайся описать шаги более подробно словами.Например, из того, что я понимаю в вашем вопросе, вы можете начать так:

  • Для каждой пары чисел (x, y) в списке
    • Если действительная частьтогда y положительно ...
    • Пусть xi - мнимая часть x, а yi - мнимая часть y
    • Если знаки xi и yi различны, то ...

Обратите внимание, как я перевел ваше описание, которое вы написали, в виде абзаца и отформатировал его, чтобы оно больше походило на код.В то же время меня не слишком беспокоит синтаксис Python.Я все еще использую слова, но пытаюсь преобразовать эти слова, чтобы они были похожи на то, как я писал бы код на python.Вы должны закончить детализацию, особенно там, где я поставил "...".Затем вам нужно будет просмотреть некоторую документацию, чтобы выяснить, как получить действительные и мнимые части комплексного числа и как получить знак числа.

0 голосов
/ 18 апреля 2019

Это работает, но 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))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...