Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正在检查周围点列表索引超出范围_Python_List_Range - Fatal编程技术网

python正在检查周围点列表索引超出范围

python正在检查周围点列表索引超出范围,python,list,range,Python,List,Range,我正在做一个学校的项目,我正试图浏览包含数字的列表。我试图检查所有8个周围的“块”,但我得到的索引超出范围异常 填写清单: for i in range(0, self.sizeX): temp = [] for j in range(0, self.sizeY): temp.append(random.randint(0, 100)) self.map.append(temp) 检查周围环境 def check(self, i, j): cou

我正在做一个学校的项目,我正试图浏览包含数字的列表。我试图检查所有8个周围的“块”,但我得到的索引超出范围异常

填写清单:

for i in range(0, self.sizeX):
    temp = []
    for j in range(0, self.sizeY):
        temp.append(random.randint(0, 100))
    self.map.append(temp)
检查周围环境

def check(self, i, j):
    count = 0

    if j-1 >= 0 & self.map[i][j-1] > 50:
        count += 1

    if (j+1) < len(self.map[i]) & self.map[i][j+1] > 50:
        count += 1

    if i-1 >= 0 & self.map[i-1][j] > 50:
        count += 1

    if i+1 < self.sizeX & self.map[i+1][j] > 50:
        count += 1

    if i-1 >= 0 & j-1 >= 0 & self.map[i-1][j-1] > 50:
        count += 1

    if i+1 < self.sizeX & j-1 >= 0 & self.map[i+1][j-1] > 50:
        count += 1

    if i-1 >= 0 & j+1 < self.sizeY & self.map[i-1][j+1] > 50:
        count += 1

    if i+1 < self.sizeX & j+1 < self.sizeY & self.map[i+1][j+1] > 50:
        count += 1

    return count
def检查(自身、i、j):
计数=0
如果j-1>=0&self.map[i][j-1]>50:
计数+=1
如果(j+1)50:
计数+=1
如果i-1>=0&self.map[i-1][j]>50:
计数+=1
如果i+150:
计数+=1
如果i-1>=0&j-1>=0&self.map[i-1][j-1]>50:
计数+=1
如果i+1=0&self.map[i+1][j-1]>50:
计数+=1
如果i-1>=0&j+150:
计数+=1
如果i+150:
计数+=1
返回计数
看起来检查>=0的条件有效,但检查大小限制的条件无效
顺便说一句,我在php中使用了这个确切的东西,没有任何问题,除了用
&
(按位and)替换
(逻辑and)之外,您的条件似乎是正确的

我还建议将测试作为变量取出;它有助于使代码更易于阅读

还请注意,您正在使用列索引,即
map[x][y]
;更常见的是使用行对齐索引,即
map[y][x]
。它本身并不是“错误”的,但处理起来可能有点笨拙

from random import randint

class Map:
    def __init__(self, width, height):
        self.width  = width
        self.height = height
        self.map    = [[randint(0, 100) for y in range(height)] for x in range(width)]

    def neighbor_fn(self, i, j, fn=lambda x: x > 50):
        left     = i - 1
        right    = i + 1
        above    = j - 1
        below    = j + 1
        do_left  = left >= 0
        do_right = right < self.width
        do_above = above >= 0
        do_below = below < self.height
        return (
              (do_left  and do_above  and fn(self.map[left][above]))
            + (do_above               and fn(self.map[i][above]))
            + (do_right and do_above  and fn(self.map[right][above]))
            + (do_left                and fn(self.map[left][j]))
            + (do_right               and fn(self.map[right][j]))
            + (do_left  and do_below  and fn(self.map[left][below]))
            + (do_below               and fn(self.map[i][below]))
            + (do_right and do_below  and fn(self.map[right][below]))
        )
来自随机导入randint
类图:
定义初始值(自身、宽度、高度):
self.width=宽度
自我高度=高度
self.map=[[randint(01100)表示范围内的y(高度)]表示范围内的x(宽度)]
def neighbor_fn(self,i,j,fn=lambda x:x>50):
左=i-1
右=i+1
以上=j-1
低于=j+1
do_left=left>=0
do_right=右<自身宽度
do_over=高于>=0
do_below=低于<自身高度
返回(
(do_left和do_above以及fn(self.map[left][above]))
+(上面的do_和fn(self.map[i][上面])
+(do_right和do_above以及fn(self.map[right][above]))
+(do_left和fn(self.map[left][j]))
+(do_right和fn(self.map[right][j]))
+(左do_和下面do_以及fn(self.map[左][下面])
+(下面是do_和fn(self.map[i][follow]))
+(do_right和do_below以及fn(self.map[右][下])
)

您可能需要
而不是二进制的
&
。请尝试
&
->
,在Python中
&
是按位和,其中
是布尔和。“我正在尝试检查周围的所有8个“块”“请提供一个感谢,我尝试了它,而不是-,它工作正常:)