2014-06-16 26 views
1
array = [] 
while len(array) < 1000: 
    i=2 
if i%array == 0: 
    append.array(i) 
i = i + 1 
print array[999] 

为了学习的目的,我试图找到第1000个素数。唯一的问题是我找不到一种方法来检查我是否可以被数组中的一个元素整除。 如果i%array == 0: 不是正确的语法,那么是什么?在Python中如何比较数组/列表与数字

+0

此外,如果有更简单的方法来解决这个问题,请让我知道! – user3743825

+0

实际上,你试图做的算法是错误的primenumber –

+0

其他的事情是我%数组给出数组是列表如何可以用列表 –

回答

2

你可以这样做:

any(item%i == 0 for item in array) 

基本上,你检查你的发电机表达的任何项目满足您的条件。

Python documentation

all(iterable) 

    Return True if all elements of the iterable are true (or if the iterable is empty). 

我不够熟悉Python知道它是怎么虽然效率。为了避免必须测试阵列中的每个项目,还可以尝试过滤测试条件的次数。作为一个例子,下面的行会给你一个不满足条件的第一个元素的列表。从中你可以知道你的条件是否满足(例如通过检查长度)以及哪个条目满足它。

filtered = list(itertools.takewhile(lambda item: item%a != 0, array)) 
if len(filtered) != len(array): 
    print array[len(filtered)] 

在这里,我选择停在满足条件的第一个元素,但也可能有其他方法!

+0

这是一个发电机,而不是一个列表:P –

+0

谢谢你指出:) – 7hibault

+0

非常感谢你,这正是我一直在寻找的! – user3743825

0

您的代码:

array = [] 
while len(array) < 1000: 
    i=2 
if i%array == 0: 
    append.array(i) 
i = i + 1 
print array[999] 

你问:

,如果我%阵列== 0:不正确的语法那么究竟是什么?

在您的代码中,array是一个列表。您无法计算整数和列表的模数;这是没有意义的。所以Python给你一个TypeError异常。

你的代码很奇怪和困惑。我想你应该好好学习介绍Python编程,如学习Python的坚硬方式这是免费的在线:

http://learnpythonthehardway.org/

为了找到一个素数,一个好办法就是使用Eratosthenes的筛子。 Rosetta Code wiki有这方面的示例代码,有11种不同的方式可以用Python解决。我认为,最简单的是第一位的,使用组查找:

http://rosettacode.org/wiki/Sieve_of_Eratosthenes#Using_set_lookup

但是,为了回答您的具体问题,您可以检查一个数是否整除通过使用这样的代码的数组元素:

# see whether the number n is divisible by the number at index 3 in array 
if n % array[3]: 
    print("True") 
else: 
    print("False") 

编辑:检查数字是否可以被数组内的任何元素整除。

def divisible_by_any(number, lst): 
    for n in lst: 
     if number % n == 0: 
      return True 
    return False 

这使用模数来检查数是否均匀地通过每个数字n从数字lst列表整除。如果检查成功,立即返回True。如果每个数字都被选中并且循环终止,则返回False

在Python中使用内置函数any()执行上述操作的方法较短。

def divisible_by_any(number, lst): 
    return any(number % n == 0 for n in lst) 

两个是完全等价的,但第二个,因为它使用运行速度更快的Python的内置any()功能的特点。这是一个学习如何学习Python内置的很酷的东西的例子,可以让你的程序更快写入,但速度更快。

+0

感谢您的资源!它写得很好。还有我的问题措辞不切实际。我想检查一个数是否可​​以被array []中保存的任何元素整除。 – user3743825

0

这正是列表和阵列之间的差别来自于在一个列表中,您无法通过将列表检查每一个值对一个又一个,就像你不能简单地将每个元素:

>>> list=[1,2,3,4,5,6,7,8] 
>>> list==5 
False 
>>> list/5 
Traceback (most recent call last): 
    File "<pyshell#18>", line 1, in <module> 
    list/5 
TypeError: unsupported operand type(s) for /: 'list' and 'int' 

虽然有阵列,你可以做这些事情:

>>> from numpy import array 
>>> array=array([1,2,3,4,5,6,7,8]) 
>>> array==5 
array([False, False, False, False, True, False, False, False], dtype=bool) 
>>> any(array==5) 
True 
>>> any(array==50) 
False 
>>> array/5 
array([0, 0, 0, 0, 1, 1, 1, 1])