12

私はpythonの初心者です(1週間)。ここで、60 のすべての素因数のリストを出力しようとしています。しかし、19 行目で次のエラーが発生します :

コード:

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 に答える