![](/img/trans.png)
[英]Python - slice indices must be integers or None or have an __index__ method
[英]Python 3.x - Cannot fix error: “slice indices must be integers or None or have an __index__ method” + more
我正在研究一个复制Eratosthenes筛网的类,并且已经得到标题中给出的错误消息。 下面是我的代码,接下来有更多问题。
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)
因此,在函数findPrimes(self)中,特别是在第14行,我得到了标题中描述的错误消息。 问题的根源到底是什么?
另外,我想问一些关于我的方法的问题。 在findPrimes中,我试图访问列表中的每个元素。 如果为真,我想获取索引号(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
然后i
从0
循环到(length of list - 1)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.