2014-06-05 4 views
-1

J'ai donc une fonction qui divise une liste 2D en 4 plus petites. Le problème avec ceci est que j'obtiens une copie de chaque coin de la grille au lieu de la grille réelle.Modifier des éléments dans la liste 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] 

par exemple,

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

sortie: [1,2,3,4]

mais ce que je veux est [2, 2, 3, 4].

Y a-t-il un moyen de sauvegarder chaque coin de la grille dans une variable au lieu d'en obtenir une copie?

+1

'a [0] + = 1' devrait faire l'affaire ... – MattDMo

+1

Êtes-vous donné la grille de façon spécifique? La solution de MattDMo fonctionnera pour votre exemple mais je ne pense pas que cela réponde à votre question. Vous pensez à des pointeurs qui, dans une langue comme C, sont géniaux, mais ce n'est pas si génial dans un langage comme Python qui n'a pas été pointé dans ce sens. Si vous n'êtes pas lié à l'implémentation de la grille sous forme de liste, je vous recommande de créer un objet de grille. Ensuite, vous pourriez avoir une méthode dans cette classe appelée 'getLeftUpperCorner' ou quelque chose qui pourrait ensuite retourner les valeurs dans cette partie de la grille alors qu'elles sont encore 'attachées' à la grille. – Nahkki

+0

Qu'essayez-vous d'accomplir? – Suor

Répondre

0

b = a[0]copies la valeur a[0]-b. Donc, b fonctionne indépendamment de l'élément de la liste. Si vous incrémentez maintenant b, la liste ne changera pas. Si vous voulez changer l'élément de la liste, vous devez changer l'élément de la liste:

a[0] += 1 
Questions connexes