Python - 检查列表中的数字是否是一个数的因子

3

我有一个数字列表(整数)(从1到10),它们不一定是连续的,但是它们是按升序排列的。

我已经多次提示用户输入可用数字的选择。当输入该数字时,它将从列表中删除以及可能存在的任何因子。

我已经防止用户选择质数。然而,有时候会有非质数的数字存在,它们没有剩余的因子。

我对Python比较新,所以在实现以下方面有困难:

  • 检查所选数字是否没有剩余的因子(即使它不是质数)。

  • 检查是否仅剩下质数或没有因子的数字。

我想使用for语句,但不确定如何确切地执行它们。 有人可以提供建议或代码吗?先感谢了...

3个回答

5

要检查数字guess是否还有任何因素,您可以使用any()

hasfactors = any(guess % n == 0 for n in numbers)

要检查所有剩余的数字是否为质数,可以使用 all() 函数。(既然您说您已经防止用户输入质数,我假设您有某种 isprime() 函数):

onlyprimes = all(isprime(n) for n in numbers)

所有的评论都很有帮助,但是我使用了你的OnlyPrimes方法,并发现all()方法还可以用于其他目的。谢谢!而且你预测得很准,我确实有一个IsPrime()函数... - Zach

3

对于第一个问题,你可以使用列表推导式构建一个新的列表,其中每个元素既不是所选数字,也不是所选数字的因数(见代码)。将其与原始列表进行比较。

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

对于第二个问题,请检查每个元素是否为质数。如果不是,检查是否存在没有因子的数字;对于每个元素,您可以对原始列表进行mod操作,并检查它是否是一个由零组成的列表。虽然我相信还有更快的方法。


1

如果L是一个非零数字的列表,则其为N的因子的列表为:

factors = [x for x in L if N % x == 0]

如果N在L中没有因子,那么列表将为空,当然。
我不确定你所说的“没有因子的数字”是什么意思,除非你指的是“质数”(?) - 在Python中检查质数已经有了几个SO问题和答案,我会使用gmpy.is_prime(来自我的扩展gmpy),但当然我有偏见;-)。
如果你的意思是“所有在L中没有因子的数字”,那么它们是无限多的,所以很难列出它们的列表。一个无界生成器:
import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

有一些优化可能是可行的,但这个很简单,我不想在不完全理解你的需求的情况下添加复杂的优化!-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接