这个问题要求我编写一个函数,从给定函数的输出中编译一个素数列表,给出两个列表,一个从2到任意数字的数字列表,另一个列表将第一个列表中的数字与"true“或"False”值匹配,这取决于第一个列表中的数字是否是素数。
我不知道我的代码是根本错误的回答问题,还是我在正确的轨道上,只是犯了一个错误.
任何帮助都将不胜感激。
问题是:
编写一个接受单个输入的函数(称为primes_list)。这个函数必须使用prime_sieve函数来计算和返回一个只有小于或等于N+1的素数的数组(或列表)。
例如,如果N=8这个函数应该返回2,3,5,7
给定的代码:
import numpy as np
def prime_sieve(N):
nums = np.arange(2, N+2, 1)
mask = []
for n in nums:
mask.append(True)
for n in nums:
for i in np.arange(2*n-2, N, n):
mask[i] = False
return nums, np.array(mask)
numbers, mask = prime_sieve(8)
print(numbers)
print(mask)
[2 3 4 5 6 7 8 9]
[ True True False True False True False False]我的守则:
import numpy as np
def primes_list(N):
numbers, mask = prime_sieve(N)
primes = []
for n in numbers:
if mask[n] == "true":
primes.append(numbers[n])
return primes
print(primes_list(8))但这给出了一个错误:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-60-4ea4d2f36734> in <module>
----> 2 print(primes_list(8))
<ipython-input-59-a5080837c5c8> in primes_list(N)
6 primes = []
7 for n in numbers:
----> 8 if mask[n] == "true":
9 primes.append(numbers[n])
10 return primes
IndexError: index 8 is out of bounds for axis 0 with size 8发布于 2019-03-08 10:17:09
您的n (用于切片列表mask )是一个不适合索引的数字列表(因为它总是包含N、N+1,而mask的最后一个索引是N1)。
另外,第二个列表mask包含Bool而不是str,因此您对mask[n] == 'true'的比较将总是返回False。
考虑到以上几点,您的primes_list可以是:
def primes_list(N):
numbers, mask = prime_sieve(N)
primes = []
for i, n in enumerate(numbers): # <<< added enumerate
if mask[i]: # <<< removed unnecessary comparison
primes.append(n) # <<< append n directly
return primes返回:
[2, 3, 5, 7]它应该是的。
https://stackoverflow.com/questions/55060891
复制相似问题