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

时间:2019-01-13 18:14:04

标签: python python-2.7 list

我有一个嵌套列表:

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 random

size=150

if size%2==1:
    size+=1

board = [[" "]*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 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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

就像@AurelBí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', ' ']