首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexError:对于大小为8的轴0,索引8超出了范围。

IndexError:对于大小为8的轴0,索引8超出了范围。
EN

Stack Overflow用户
提问于 2019-03-08 10:06:55
回答 1查看 4.2K关注 0票数 2

这个问题要求我编写一个函数,从给定函数的输出中编译一个素数列表,给出两个列表,一个从2到任意数字的数字列表,另一个列表将第一个列表中的数字与"true“或"False”值匹配,这取决于第一个列表中的数字是否是素数。

我不知道我的代码是根本错误的回答问题,还是我在正确的轨道上,只是犯了一个错误.

任何帮助都将不胜感激。

问题是:

编写一个接受单个输入的函数(称为primes_list)。这个函数必须使用prime_sieve函数来计算和返回一个只有小于或等于N+1的素数的数组(或列表)。

例如,如果N=8这个函数应该返回2,3,5,7

给定的代码:

代码语言:javascript
复制
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]

我的守则:

代码语言:javascript
复制
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))

但这给出了一个错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-08 10:17:09

您的n (用于切片列表mask )是一个不适合索引的数字列表(因为它总是包含N、N+1,而mask的最后一个索引是N1)。

另外,第二个列表mask包含Bool而不是str,因此您对mask[n] == 'true'的比较将总是返回False

考虑到以上几点,您的primes_list可以是:

代码语言:javascript
复制
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

返回:

代码语言:javascript
复制
[2, 3, 5, 7]

它应该是的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55060891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档