清空列表不起作用 - Python

4
我正在编写一些代码,旨在找到数字的质因数分解。主要函数递增遍历数字;我这样做是因为我想使用代码进行时间实验。我不介意它不是超级高效的,对我来说,项目的一部分将是使它更加高效。它还没有完全完成(例如,它不会简化质因数分解)。我已经测试过除主函数以外的所有函数,并且它们都有效,所以没有问题。
我的代码是:
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()这行代码后就可以正常工作。

如果有任何帮助需要,请告诉我。谢谢!


请参考为什么Python中没有list.clear()方法?以获取解释。 - roganjosh
@roganjosh clear 方法是在 Python 3 中添加的。OP 可能正在使用 Python 2。 - Moses Koledoye
@roganjosh,好的,谢谢。我可能很快指出文档中并没有说list.clear()只在3.3中添加,它只是给出了它。所以这让我感到困惑。 - Auden Young
@MosesKoledoye 哦,好的,谢谢。很高兴我没有标记为重复 :) - roganjosh
@roganjosh,如果您回答并提供方法del primfac[:],我会接受... - Auden Young
2个回答

12

list.clear() 方法在 Python 3.3 中添加。在早期版本中可以通过 del primfac[:] 实现相同的效果。


4

在Python 3.x之前,Python的list没有clear方法。如果你的代码在Python 2.x或更早的版本中运行,它将无法工作。你可以创建一个新的列表或删除旧列表的所有内容。

#create a new list 
primfac = []

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接