使用Python 3.3.2中的列表查找素数

时间:2014-07-04 23:18:42

标签: python list numbers compare primes

我正在尝试使用Python 3.3.2中的列表创建一个查找素数的程序。我要做的是从ns中取出一个元素并将其除以b中的所有元素。

这就是我所拥有的(不起作用):

b = [1]
ns = [1]

while 1 == 1:
    if ns[-1] / b[:] == 1 or ns[-1]:
        print (ns[-1])
        ns.append(ns[-1]+1)
        b.append(b[-1]+1)
    else:
        print ("No prime found.")

这是我收到的错误:

if ns[-1] / b[:] == 1 or ns[-1]:
TypeError: unsupported operand type(s) for /: 'int' and 'list'

我理解为什么这个操作是不可能的(将列表中的整数元素除以另一个整个列表也不起作用)并且想知道是否有任何方法可以实现我的目标。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您不能分割整数和列表。你能做的就是使用列表理解。演示:

>>> ns = [1,2,3]
>>> b= [7,9,12,13]
>>> # divide last element of ns by all elements of b
... 
>>> [float(ns[-1])/item for item in b if item]
[0.42857142857142855, 0.3333333333333333, 0.25, 0.23076923076923078]

新列表的第一个元素是3/7,第二个元素是3/9,依此类推。 if item检查是为了确保您不会除以零。

编辑:你实际上可能意味着一些不同的东西,即将ns中的一个元素连续划分为b中的每个元素。 ns[-1]的演示:

>>> ns = [1,2,3]
>>> b = [1,2,3]
>>> sol = ns[-1]
>>> for item in b:
...     sol = float(sol)/item
... 
>>> sol
0.5

sol是((3/3)/ 2)/ 1

此外,您的while循环永远不会结束。你确定要的吗?