我有一个绘制矩形的函数:
def drawTbl(l, w):
ln1 = ' '
ln2 = '-'
ln3 = '|'
x = range(l)
print '+', ln2*w, '+'
for i in range(len(x)):
print ln3, ln1*w, ln3
print '+', ln2*w, '+'
它工作正常,但我试图对此进行图形化(这就像一个pong克隆),这样我就可以在中心放置一个球“O”并使用X和Y进行碰撞检测。当我使用这个功能时:
def tblData(l, w):
table=[]
for x in range(l):
table.append([])
for y in range(w):
table.append([])
它似乎附加了空白列表,但是当我尝试使用table[x][y]
时,我收到的只是一个错误。
当我从table
返回tblData
时,我会得到一个空列表列表,
但是说(l, w)
是(12, 56)
,所以我试图将球'O'放在网格(6, 28)
的中心,只需输入table[6][28]
就会返回错误,所以我我不知道如何将'O'追加到table[6,28]
所以我的问题是,如何有效地访问list[x][y]
?
答案 0 :(得分:5)
您不需要创建空列表,而是需要将内部列表中的值初始化为某个合理的值,例如空格。
例如:
def tblData(l, w):
table=[]
for x in range(l):
table.append([' '] * w)
return table
或者更简洁:
def tblData(l, w):
return [[' '] * w for x in range(l)]
请注意,[' '] * 3
会创建列表[' ', ' ', ' ']
,因此[' '] * w
相当于
[' ' for x in range(w)]
。
例如:
>>> import pprint
>>> table = [[' '] * 4 for x in range(5)]
>>> pprint.pprint(table)
[[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ']]
>>> table[3][1] = 'O'
>>> pprint.pprint(table)
[[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
[' ', 'O', ' ', ' '],
[' ', ' ', ' ', ' ']]