我是python的初学者(一周).在这里,我尝试打印60的所有素因子的列表.但对于第19行,我收到以下错误: TypeError:%支持的操作数类型:'float'和'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)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
mgi*_*son 18
要将数学运算应用于列表中的每个元素,可以使用列表推导:
new_list = [ x%num for x in old_list]
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以做到这一点.有时人们会使用map
new_list = map(lambda x: x%num, old_list)
Run Code Online (Sandbox Code Playgroud)
但大多数人更喜欢第一种形式,它通常比使用更有效和清晰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)
Run Code Online (Sandbox Code Playgroud)