2014-06-05 53 views
-1

所以我有一个函数将2d列表拆分为4个小列表。这个问题是我得到了网格的每个角落副本,而不是实际的网格。编辑python列表中的元素

def split(grid): 
    tLeft = [row[0:len(grid)/2 + 1] for row in grid[0:len(grid)/ 2 + 1]] 
    tRight = [row[len(grid)/2:] for row in grid[0:len(grid)/ 2 + 1]] 
    bLeft = [row[0:len(grid)/2 + 1] for row in grid[len(grid)/ 2:]] 
    bRight = [row[len(grid)/2:] for row in grid[len(grid)/ 2:]] 
    return [tLeft, tRight, bLeft, bRight] 

例如,

a = [1, 2, 3, 4] 
b = a[0] 
b += 1 
print a 

输出:[1,2,3,4]

但我想是[2,2,3,4]。

有没有一种方法可以将网格的每个角落保存在变量中而不是获取它的副本?

+1

'A [0] + = 1'应该做的伎俩...... – MattDMo

+1

你给出一个具体的方式电网? MattDMo的解决方案将适用于您的示例,但我认为它不能解决您的问题。你在用类似C语言的指针来思考问题,但在像Python这样的语言中,它并不是那么好,在这个意义上没有指出。如果你没有把网格作为列表绑定,我会建议制作一个网格对象。然后你可以在这个类中有一个名为'getLeftUpperCorner'的方法,或者它可以在它们仍然'连接'到网格时返回那部分网格中的值。 – Nahkki

+0

你想完成什么? – Suor

回答

0

b = a[0]副本将值从a[0]更改为b。因此b独立于列表元素工作。如果您现在增加b,则列表不会更改。如果要更改列表元素,你必须改变列表元素:

a[0] += 1