python 使用嵌套的for循环创建二维列表?

Python016

python 使用嵌套的for循环创建二维列表?,第1张

因为你一开始的arr只是一个一维列表[],所以第一个循环其实是为第二个循环准备需要用到的空列表,你要是append(x)的话相当于arr在第一层第一个循环后变成[0],然后在第二层的循环里arr[x]=arr[0]=0就是一个数,没办法append

第一点其实很多小伙伴题目都看不懂 主要就在于输入的格式 第一行是n,m,k这个就没什么好解释 

第二行到第 m + 1 行分别是火把的位置 其实这个时候可以把m带进去就是1 按照样例来说其实第二行输入的就是火把的坐标

以次类推 其实可以有多行 就是2到m+1行都是火把的坐标 

m+2到m+k+1其实就是萤石的坐标 如果还不懂自己写两个就知道了 

其实看到题目就知道是创建二维列表 没什么好说的 

主要是火把的处理比较麻烦 萤石比较简单 

注意输入的坐标都要减一是对应列表的坐标

x,y 这个时候x其实理解为列 y为行就明白了 先把y对应的上下五行设为True而列不变就可以了 

         for i in range(x-2, x+3): # 控制y 行 

把x对应的左右设为True而行不变就可以了 至于为什么x-2,y-2,x+3是什么就不解释了 

那么还有四个没有处理 其实就是把3行3列设置为True就可以 x-1,y+2不就可以了吗 

n, m, k = map(int, input().split())

sum = n * n

mp = []  # 生成二维列表

for i in range(n):

    mp.append([])

    for j in range(n):

        mp[i].append(False)

while m >0:

    x, y = map(int, input().split())

    x -= 1  # 改为列表的索引  2,2

    y -= 1

    for i in range(x-2, x+3):  # 控制y 行

        if i <0 or i >= n:

            continue

        else:

            mp[i][y] = True

    for i in range(y-2, y+3):  # 控制x 列

        if i <0 or i >= n:

            continue

        else:

            mp[x][i] = True

    for i in range(x-1, x+2):  # 控制行

        for j in range(y-1, y+2): # 控制列

            if i <0 or i >= n or j <0 or j >= n:

                continue

            else:

                mp[i][j] = True

    m -= 1

while k >0:

    x, y = map(int, input().split())

    x -= 1

    y -= 1

    for i in range(x-2, x+3):

        for j in range(y-2, y+3):

            if i <0 or i >= n or j <0 or j >= n:

                continue

            else:

                mp[i][j] = True

    k -= 1

cnt = 0

for i in range(n):

    for j in range(n):

        if mp[i][j]:

            cnt += 1

print(sum - cnt)