array = []
while len(array) < 1000:
i=2
if i%array == 0:
append.array(i)
i = i + 1
print array[999]
出于学习目的,我试图找到第1000个素数。唯一的问题是我找不到一种方法来检查我是否可以被数组中的元素整除。 如果我%array == 0: 是不是正确的语法,那是什么?
答案 0 :(得分:2)
您可以执行以下操作:
any(item%i == 0 for item in array)
基本上,你检查你的生成器表达式的任何项目是否满足你的条件。
all(iterable)
Return True if all elements of the iterable are true (or if the iterable is empty).
我不熟悉Python,知道它的效率如何。为避免测试阵列中的每个项目,您还可以尝试过滤测试条件的次数。例如,以下行将为您提供一个列表,其中包含不满足条件的第1个元素。从那里你可以知道你的病情是否满意(例如通过检查长度)以及满足它的项目。
filtered = list(itertools.takewhile(lambda item: item%a != 0, array))
if len(filtered) != len(array):
print array[len(filtered)]
在这里,我选择停在满足条件的第一个元素,但也可能有其他方法!
答案 1 :(得分:0)
您的代码:
array = []
while len(array) < 1000:
i=2
if i%array == 0:
append.array(i)
i = i + 1
print array[999]
你问:
如果i%array == 0:不是正确的语法那么是什么?
在您的代码中,array
是一个列表。您无法计算整数和列表的模数;这是没有意义的。所以Python给你一个TypeError
例外。
你的代码非常奇怪和困惑。我认为你最好学习一下Python编程的介绍,比如学习Python的艰难之路这是免费的:
http://learnpythonthehardway.org/
要找到素数,一个好方法是使用Eratosthenes的Sieve。 Rosetta Code wiki有这样的示例代码,有11种不同的方法可以使用Python来解决它。我认为最简单的是第一个,使用set lookup:
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
。
使用内置函数any()
在Python中执行上述操作的方法较短。
def divisible_by_any(number, lst):
return any(number % n == 0 for n in lst)
两者完全等效,但第二个运行速度更快,因为它使用的是any()
函数的Python内置功能。这是一个如何学习Python内置的所有很酷的东西可以让你的程序编写更快,更快。
答案 2 :(得分: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])