12

我是python的初学者(一周)。在这里,我正在尝试打印 60 的所有主要因子的列表。但是对于第 19 行,我收到以下错误: TypeError: unsupported operand type(s) for %: 'float' and 'list'

编码:

whylist = []
factor = []
boom = []
primefactor = []
n = 60
j = (list(range(1, n, 1)))



for numbers in j:
    if n%numbers == 0:
        whylist.append(numbers)
        for everynumber in whylist:
            factor.append(everynumber)

for things in factor:
    u = (list(range(1, things, 1)))
    d = float(things)
    if d%u == 0:
        boom.append(things)
    if len(boom) == 1:
        for every in boom:
            primefactor.append(every)
print(primefactor)

我究竟做错了什么?

4

2 回答 2

25

要将数学运算应用于列表中的每个元素,您可以使用列表理解:

new_list = [ x%num for x in old_list]

还有其他方法可以做到这一点。有时人们会使用map

new_list = map(lambda x: x%num, old_list)

但是大多数人更喜欢第一种形式,它通常比使用更有效和更清晰lambda(当你刚开始学习 python 时可能会有点混乱)。

编辑

这是您尝试的递归实现:

def factorize(n):
    out=[]
    for i in range(2,n):
        if(n%i == 0): #first thing to hit this is always prime
            out.append(i) #add it to the list
            out+=factorize(n/i)  #get the list of primes from the other factor and append to this list.
            return out
        else:
            return [n] # n%i was never 0, must be prime.

print factorize(2000)
于 2012-07-16T19:24:49.223 回答
1

另一种选择是使用 numpy 数组而不是列表。

import numpy as np
j = np.arange(1,n,1)
rem = np.mod(j,num)

numpy 将为您处理广播操作。它也应该比列表推导或地图更快。

于 2012-07-16T19:32:31.717 回答