首页 > 解决方案 > Python 检查两个列表

问题描述

我对 python 比较陌生,遇到了以下问题:

给定两个列表 a 和 b 以及一个整数 n,检查
a) a 的所有元素是否是 n 的因数
b) n 是 b 的所有元素的因数

我的代码似乎不正确。有人可以在这里指出错误。

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

任何帮助表示赞赏

标签: python

解决方案


明显的一个(你错过了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 个错误结果。


推荐阅读