.clear()for list不工作-python

2024-04-24 19:07:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一些代码,应该找到素数的因式分解。主函数通过数字递增;我这样做是因为我想使用代码进行计时实验。我不介意它不是超级高效的,对我来说项目的一部分就是让它更高效。它还没有完全完成(例如,它没有简化素数分解)。我已经测试了除主函数之外的所有函数,它们都工作过,所以这些函数没有问题。

我的代码是

import math 
import time

primfac=[]

def primes(n):
    sieve = [True] * n
    for i in xrange(3,int(n**0.5)+1,2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1)
    return [2] + [i for i in xrange(3,n,2) if sieve[i]]


def factfind(lsp,n): #finds factors of n among primes
    for i in lsp:
        if n%i==0:
            primfac.append(i)
        else:
            i+=1

def primfacfind(n1,n2):
    while n1 < n2:
        n = n1

        time_start = time.clock()

        factfind(primes(n),n)
        print primfac

        time_elapsed = time.clock() - time_start
        print "time:", time_elapsed

        primfac.clear()

        n1+=1

print primfacfind(6,15)

运行它会得到输出

[2, 3]
time: 7.5e-05
Traceback (most recent call last):
  File "python", line 43, in <module>
  File "python", line 39, in primfacfind
AttributeError: 'list' object has no attribute 'clear'

我也不确定到底怎么了。它给出了素数分解的正确数字,并打印了时间,但似乎无法清除列表。注释掉这行primfac.clear()就可以了。

任何帮助都将不胜感激。谢谢!


Tags: 函数代码inforiftimedef素数
2条回答

Python 3.3中添加了list.clear()方法。在早期版本中,可以通过del primfac[:]来实现等效。

Python的list在Python 3.x之前没有clear方法。您的代码在Python 2.x或更早版本中无法工作。可以创建新列表,也可以删除旧列表的所有内容。

#create a new list 
primfac = []

#or delete all the contents of the old list
del primfac [:]

相关问题 更多 >