Python 3.x - 无法修复错误:"slice indices must be integers or None or have an __index__ method" + 更多



我正在制作一个复制埃拉托色尼筛子的类,并且一直得到标题中给出的错误消息。下面是我的代码,后面是更多的问题。

    class Sieve:
def __init__(self, max):
    if max < 0:
        raise RuntimeError
    else:
        self.numbers = [([False] * 2) + ([True] * (max - 1))]
def findPrimes(self):
    for i in self.numbers:
        if self.numbers:
            for j in self.numbers[i:]:
                if j % i == 0:
                    self.numbers[j] = False
                else:
                    None
        else:
            None
def howMany(self):            ##Must use reduce
    reduce((lambda i: True if numbers else False), self.numbers, self.numbers[2:])
def toList(self):
    T = [L[i] for i in self.numbers]
    return print(self.numbers)

因此,在函数findprime (self)中,特别是在第14行,我得到了标题中描述的错误消息。问题的根源到底是什么?

另外,我想问一些关于我的方法的问题。在findprime中,我尝试访问列表中的每个元素。如果它为真,我想取索引号(I)并访问所有其他是I的倍数的索引(I, I + I, I + I + I,等等)。我还没有完全测试过,但我觉得我的语法是错误的。如有任何帮助,不胜感激。

最后,我需要在方法howMany中使用reduce函数来确定列表中有多少元素为真,并返回该数字。再一次,任何关于这个话题的知识都是非常感谢的。

谢谢大家

在python中,for i in self.numbers的工作方式类似于Java增强的For循环,其中For循环将遍历列表,i将是列表条目(在您的示例中是True / False)而不是索引。

如果您想访问列表索引,请使用for i in range(len(self.numbers)), i将从0循环到(length of list - 1)

最新更新