为了账号安全,请及时绑定邮箱和手机立即绑定

更改列表python中多个项目的值

更改列表python中多个项目的值

慕标5832272 2021-10-10 16:18:10
我有一个嵌套列表:Table=[['','','','',''],       ['','','','',''],       ['','','','',''],       ['','','','',''],       ['','','','',''],       ['','','','','']]我随机放置了一些值Table,现在我想在这些值的 2D 邻居中放置其他东西。例如:Table=[['','','','',''],       ['','','','',''],       ['','','','',''],       ['','','value','',''],       ['','','','',''],       ['','','','','']]然后我想补充:Table=[['','','','',''],       ['','','','',''],       ['','','1','',''],       ['','1','value','1',''],       ['','','1','',''],       ['','','','','']]下面是我所有的代码,我不知道为什么,但它会以任何其他格式接受它,抱歉:/def add_nukes():    pos=j.index('nuke')    if "nuke" not in j[0]:j[pos+1]='1'        if "nuke" not in j[-1]:             j[pos-1] = "1"            board[pos][i-1]="1"            board[i+1][pos]="1"import randomsize=150if size%2==1:    size+=1board = [[" "]*size for i in range(size)] bombs = 25all_cells = ["nuke"] * bombs + [" "] * (size - bombs) random.shuffle(all_cells)board = [all_cells[i:i+10] for i in range(0, size, 10)]count=0for j in board:    for i in range(len(j)):        count+=1        if "nuke" in j[i]:            add_nukes()        elif "nuke" in j[i]:            add_nukes()for item in board:    print item 
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

中的任何值Table都由其xy坐标唯一标识,即第 2 列(x == 1因为 0 索引)和第 3 行 ( y == 2) 中的元素是Table[y][x] == Table[2][1]

任何单元格的四个直接邻居Ax一个远离AORy一个远离的单元格A。如果ATable[y][x],则邻居是[Table[y - 1][x], Table[y + 1][x], Table[y, x - 1], Table[y, x + 1]]


查看完整回答
反对 回复 2021-10-10
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

就像@Aurel Bílý 提到的那样,您需要为特定情况添加四个相邻坐标:[Table[y - 1][x], Table[y + 1][x], Table[y, x - 1], Table[y, x + 1]].


为此,您必须首先确保这些坐标有效并且不会引发IndexError异常。确保此坐标有效后,您可以安全地将它们添加到表中。


下面的代码演示了这一点:


Table=[['','','','',''],

       ['','','','',''],

       ['','','','',''],

       ['','','value','',''],

       ['','','','',''],

       ['','','','','']]


def isInBounds(Table,x,y):

    return 0 <= x < len(Table) and 0 <= y < len(Table[0])


def addValue(Table,x,y,value):

    if isInBounds(Table,x,y):

        Table[x][y] = value


def addValuesAround(Table,x,y,value):

    addValue(Table,x-1,y,value)

    addValue(Table,x,y-1,value)

    addValue(Table,x+1,y,value)

    addValue(Table,x,y+1,value)


addValuesAround(Table,3,2,1)

for elem in Table:

    print(elem)

这将返回:


['', '', '', '', '']

['', '', '', '', '']

['', '', 1, '', '']

['', 1, 'value', 1, '']

['', '', 1, '', '']

['', '', '', '', '']

编辑:


我想我明白了,使用我们的两个代码。请务必更改print函数的语法,因为您使用的是 Python 2.7 而我使用的是 Python 3.6:


import random


def isInBounds(Table,x,y):

    return 0 <= x < len(Table) and 0 <= y < len(Table[0])


def addValue(Table,x,y,value):

    if isInBounds(Table,x,y):

        Table[x][y] = value


def addValuesAround(Table,x,y,value):

    addValue(Table,x-1,y,value)

    addValue(Table,x,y-1,value)

    addValue(Table,x+1,y,value)

    addValue(Table,x,y+1,value)


size=150


if size%2==1:

    size+=1


board = [[" " for i in range(size)] for i in range(size)] 

bombs = 25


all_cells = ["nuke"] * bombs + [" "] * (size - bombs) 


random.shuffle(all_cells)


board = [all_cells[i:i+10] for i in range(0, size, 10)]


count=0


for i in range(len(board)):

    for j in range(len(board[i])):

       if board[i][j] == 'nuke':

           addValuesAround(board,i,j,"1")


for item in board:

    print(item)

这将给出一个像这样的板实例:


[' ', ' ', ' ', ' ', '1', ' ', '1', ' ', '1', ' ']

[' ', ' ', ' ', '1', 'nuke', '1', 'nuke', '1', 'nuke', '1']

['1', ' ', ' ', ' ', '1', ' ', '1', ' ', '1', '1']

['nuke', '1', '1', '1', 'nuke', '1', ' ', ' ', '1', 'nuke']

['1', '1', 'nuke', '1', '1', ' ', '1', ' ', ' ', '1']

[' ', ' ', '1', ' ', ' ', '1', 'nuke', '1', ' ', ' ']

[' ', ' ', '1', ' ', ' ', '1', '1', ' ', ' ', ' ']

[' ', '1', 'nuke', '1', '1', 'nuke', '1', ' ', ' ', ' ']

['1', 'nuke', '1', ' ', '1', '1', '1', ' ', '1', ' ']

[' ', '1', 'nuke', '1', 'nuke', '1', 'nuke', '1', 'nuke', '1']

['1', 'nuke', '1', ' ', '1', ' ', '1', ' ', '1', ' ']

[' ', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']

[' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ']

[' ', '1', 'nuke', '1', ' ', '1', ' ', '1', ' ', ' ']

[' ', ' ', '1', ' ', '1', 'nuke', '1', 'nuke', '1', ' ']


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号