Проверка Python через два списка

#python

#python

Вопрос:

Я относительно новичок в Python, и я столкнулся с проблемой, приведенной ниже:

Учитывая два списка a и b и целое число n, проверьте,
а) все элементы a являются коэффициентом n
б) n является коэффициентом всех элементов b

Мой код не кажется правильным. Может кто-нибудь, пожалуйста, указать на ошибку здесь.

 return n if n%x==0 for x in a and y%n==0 for y in b
  

Любая помощь приветствуется

Комментарии:

1. Вы ожидаете, что эта функция вернет bool значение, указывающее, выполнены оба условия или нет?

2. Цикл For так не работает. Пожалуйста, опубликуйте полный код.

3. return all(n % x == 0 for n in a) and all(y % n == 0 for y in b)

4. @Dev5 Приведенный выше комментарий от @Chris_Rands точен, если вы просто хотите bool вернуть. Вы могли бы использовать его решение в if / else дереве, если бы хотели сделать что-то вроде «Return False / None if не проходит, верните int , если это произойдет`.

5. @JPI93 хорошо, да, извините, мой вопрос был не совсем точным. Спасибо за дополнительную информацию 🙂

Ответ №1:

Очевидный (вы пропустили all(...) ):

 all(n % x == 0 for x in a) and all(y % n == 0 for y in b)
  

Забавный:

 0 == n % reduce(lcm, a) == reduce(gcd, b) % n
  

Однако требуется Python 3.9.

Тестовый код:

 from itertools import product
from math import gcd, lcm
from functools import reduce

R = range(1, 11)
true = false = 0
for n in R:
    for a in product(R, repeat=3):
        for b in product(R, repeat=3):
            expect = all(n % x == 0 for x in a) and all(y % n == 0 for y in b)
            result = 0 == n % reduce(lcm, a) == reduce(gcd, b) % n
            assert result == expect
            true  = expect
            false  = not expect
print(true, false)
  

=> Никаких сбоев, те же 2 723 истинных результата и 9 997 277 ложных результатов.