如何在python中对列表中的每个数字应用数学运算?
我是python的初学者(一周)。在这里,我试图打印60的所有素数的列表。但对于第19行,我得到以下错误: TypeError:不支持%:“float”和“list”的操作数类型 守则:如何在python中对列表中的每个数字应用数学运算?,python,python-3.x,Python,Python 3.x,我是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(num
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)
我做错了什么?要对列表中的每个元素应用数学运算,可以使用列表理解:
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)
另一种选择是使用numpy数组而不是列表
import numpy as np
j = np.arange(1,n,1)
rem = np.mod(j,num)
numpy将为您负责广播业务。它也应该比列表理解或映射更快。@Levon
range
不会在python3.x上返回列表,但你是对的,我认为这里不需要list(range(…)
。@mgilson啊。。是的,说得好。。没有注意到标签。。谢谢向量运算很方便,但在使用numpy处理Euler问题时,一个容易忽略的危险是,除非使用dtype=object
或其他什么东西,否则整数的精度不会是任意的。@tcaswell--numpy很好。我曾想过把它添加到我的答案中,但我决定如果没有它,我的答案会更“纯粹”。我很高兴你加上了它。在这里,您可以只使用%
操作符,它仍然可以工作rem=j%num
@DSM True,但只有在处理大量数据时,这才应该成为一个问题,此时暴力强迫问题可能不是正确的解决方案。@mgilson我倾向于尽可能明确。np.mod
优于%
的一个优点是,你可以向它扔一个iterable,它仍然会做“正确的事情”,as%
会抱怨。看起来我的计划是错误的,将u固定为列表现在给了我输出[2,2](我正在寻找主要因素)我能知道我可能错在哪里吗?@MubtasimSh--我在理解你的代码和你想用它做什么方面有点困难。我添加了一个递归的因式分解函数,它似乎可以工作。