同时附加2个列表

时间:2013-05-31 20:50:22

标签: python list

我有一个绘制矩形的函数:

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]

1 个答案:

答案 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', ' ', ' '],
 [' ', ' ', ' ', ' ']]