如何在python中对列表中的每个数字应用数学运算?

如何在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

我是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)

我做错了什么?

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

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--我在理解你的代码和你想用它做什么方面有点困难。我添加了一个递归的因式分解函数,它似乎可以工作。