int除以list,返回值除以

2024-03-29 12:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

这是第一组创建2-10000000个素数的代码。我想找到25000001的素因子分解。所以我想用25000001除以列表中的每个数字,然后把这个数字返回到一个从大到小的列表中。你知道吗

n = 10000000
primes = list()
multiples = set()
for i in range(2, n+1):
     if i not in multiples:
        primes.append(i)
        multiples.update(range(i*i, n+1, i))

def primeFactors(x, factors):
    factorList = []
    if (x % factors) == 0:
        factorList.append(factors)
    print(factorList)

primeFactors(25000001, primes)

Tags: 代码in列表ifrange数字素数因子
3条回答

您可以使用列表:

factorList = [e for e in factors if x % e == 0]

角色

e for e in factors

将对factors的元素进行“迭代”,条件if x % e == 0用于过滤元素。你知道吗

你想在这里做的其实是可行的,只是不能用列表。如果使用numpy数组,则可以将其转换为算术表达式,并在整个数组中自动广播:

>>> import numpy as np
>>> primes = np.array([2, 3, 5, 7, 11])
>>> 18 % primes
array([0, 0, 3, 4, 7])
>>> 18 % primes == 0
array([ True,  True, False, False, False], dtype=bool)
>>> primes[18 % primes == 0]
array([2, 3])

这正是你想做的,几乎完全是你想做的方式,它的工作方式和你期望的一样。你知道吗

这显然更简洁,而且几乎总是更高效;更重要的是,它通常更具可读性。你知道吗


如果你想找到重复的因素呢?好吧,你可以把整个数组平方,然后把它立方,依此类推:

>>> primes[18 % (primes**2) == 0]
array([3])
>>> primes[18 % (primes**3) == 0]
array([])

或者,更有效地,您可以将工作限制为仅过滤掉的数组,并以更少的工作获得相同的结果:

>>> factors = primes[18 % primes == 0]
>>> factors2 = factors[18 % (factors**2) == 0]
>>> factors2
array([3])

如果你想用x来检查每个因子中的数字,你需要迭代

for n in factors: # iterate over the list
    if x % n == 0: # check "n" each number in the list
        factorList.append(n) # append n if the if statement is True

[1,2,3,4...] % 3基本上就是您当前正在做的事情,而不是检查每个元素。你知道吗

你可以通过列表理解来达到同样的效果:

factorList = [n for n in factors if x % n == 0]

for循环和list理解都是等价的。你知道吗

要按所需格式打印:

print "{} = {}".format(x," * ".join(map(str,factorList)))

如果您只是计划打印数字,可以在循环或列表中使其成为字符串:

[str(x) for x in factors if n % x == 0]

print "{} = {}".format(x," * ".join(factorList))   

要使用join元素必须是字符串,因此我们必须使用str(x)或使用map将每个int转换为字符串。你知道吗

相关问题 更多 >