2010-01-20 5 views
1

Heres мой код:Python: Замена элемента в списке списков

data = [ 
[5,3,0,0,7,0,0,0,0], 
[6,0,0,1,9,5,0,0,0], 
[0,9,8,0,0,0,0,6,0], 
[8,0,0,0,6,0,0,0,3], 
[4,0,0,8,0,3,0,0,1], 
[7,0,0,0,2,0,0,0,6], 
[0,6,0,0,0,0,2,8,0], 
[0,0,0,4,1,9,0,0,5], 
[0,0,0,0,8,0,0,7,9] 
] 

element = 4 
x = 0 
y = 0 

    data[x][y] = element 

Я хочу, чтобы заменить элемент в точке с координатами 0,0, но когда я печатать данные, которые он hasnt изменил элемент.


******* ****** EDIT: OK SO HERES МОЙ ПОЛНЫЙ КОД: **

data = [ 
[5,3,0,0,7,0,0,0,0], 
[6,0,0,1,9,5,0,0,0], 
[0,9,8,0,0,0,0,6,0], 
[8,0,0,0,6,0,0,0,3], 
[4,0,0,8,0,3,0,0,1], 
[7,0,0,0,2,0,0,0,6], 
[0,6,0,0,0,0,2,8,0], 
[0,0,0,4,1,9,0,0,5], 
[0,0,0,0,8,0,0,7,9] 
] 

z = [] 

#row 6 
x1 = 6 
for y in range(9): 
    print data[x1][y] 
    z.append(data[x1][y]) 


#column 8 
y1 = 8 
for x in range(9): 
    print data[x][y1] 
    z.append(data[x][y1]) 


#finds the block coordinates 
x = 6 
y = 8 
basex = x - x%3 
basey = y - y%3 
for x1 in range(basex,basex+3): 
    for y1 in range(basey,basey+3): 
     print x1,y1, data[x1][y1] 
     z.append(data[x1][y1]) 

item = [1,2,3,4,5,6,7,8,9] 
for element in item: 
    if element not in z: 
      print element 

data[x][y] = element 
print data[x][y] 
+0

Это работает для меня. Возможно, вы опустили какой-то важный код. Можете ли вы разместить * полный * и * рабочий * пример, который * демонстрирует * вашу проблему, не включая * ненужные данные *. Это поможет нам быстрее решить вашу проблему. –

+0

Работает здесь.Вы делаете что-то еще неправильно. –

+0

работает для меня ... –

ответ

1

Вы должны прерваться на вид, как только вы найдете необходимый элемент:

item = [1,2,3,4,5,6,7,8,9] 
for element in item: 
    if element not in z: 
      print element 
      break 

data[x][y] = element 
print data[x][y] 
1

прекрасно работает для меня ...

>>> data = [ 
... [5,3,0,0,7,0,0,0,0], 
... [6,0,0,1,9,5,0,0,0], 
... [0,9,8,0,0,0,0,6,0], 
... [8,0,0,0,6,0,0,0,3], 
... [4,0,0,8,0,3,0,0,1], 
... [7,0,0,0,2,0,0,0,6], 
... [0,6,0,0,0,0,2,8,0], 
... [0,0,0,4,1,9,0,0,5], 
... [0,0,0,0,8,0,0,7,9] 
... ] 
>>> element = 4 
>>> x = 0 
>>> y = 0 
>>> print data[0][0] 
5 
>>> data[x][y] = element 
>>> print data[0][0] 
4 
>>> 
1

Вы, похоже, внесли свою последнюю строку, что дает мне ошибку в интерпретаторе Python. Если я удалю эту вкладку, она будет работать.

Ваш массив data изменился. Может быть, вы не распечатываете его, чтобы не знать, что он изменился?

1

Какую версию python вы используете? Можете ли вы попробовать его из командной строки и опубликовать результаты, как показано ниже? Кажется, это работает для меня. Я в основном копировал и вставлял прямо с вашего поста.

Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15) 
[GCC 4.4.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> data = [ 
... [5,3,0,0,7,0,0,0,0], 
... [6,0,0,1,9,5,0,0,0], 
... [0,9,8,0,0,0,0,6,0], 
... [8,0,0,0,6,0,0,0,3], 
... [4,0,0,8,0,3,0,0,1], 
... [7,0,0,0,2,0,0,0,6], 
... [0,6,0,0,0,0,2,8,0], 
... [0,0,0,4,1,9,0,0,5], 
... [0,0,0,0,8,0,0,7,9] 
... ] 
>>> 
>>> element = 4 
>>> x = 0 
>>> y = 0 
>>> 
>>> data 
[[5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9]] 
>>> data[x][y] = element 
>>> data 
[[4, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9]] 
>>> 
1

Единственное, что я вижу в вашем коде, это то, что самая последняя строка находится на другом уровне отступа. Поставить его на тот же уровень остальной части кода. :)

Вы также можете быть заинтересованы в модуле pprint:

>>> from pprint import pprint 
>>> pprint(data) 
[[4, 3, 0, 0, 7, 0, 0, 0, 0], 
[6, 0, 0, 1, 9, 5, 0, 0, 0], 
[0, 9, 8, 0, 0, 0, 0, 6, 0], 
[8, 0, 0, 0, 6, 0, 0, 0, 3], 
[4, 0, 0, 8, 0, 3, 0, 0, 1], 
[7, 0, 0, 0, 2, 0, 0, 0, 6], 
[0, 6, 0, 0, 0, 0, 2, 8, 0], 
[0, 0, 0, 4, 1, 9, 0, 0, 5], 
[0, 0, 0, 0, 8, 0, 0, 7, 9]] 

Немного легче читать!

0

Ах ... теперь, когда ты отвечал весь код, он делает гораздо больше смысла ...

Причина, по которой не работает так, как вы ожидали, потому что «элемент» не существует вне контекст цикла. Вам нужно будет сохранить значение, которое вы хотите использовать, в переменной, которая существует в правильной области.

0

Он по-прежнему работает с отредактированным кодом. Я изменил последние несколько строк коды на это:

print "before =", data[x][y] 
print "element =", element 
data[x][y] = element 
print "after =", data[x][y] 

И те печати это:

before = 0 
element = 9 
after = 9 

Как уже было упомянуто, последнее значение элемента из цикла будет то, что его значение после завершения цикла for. Вот почему вы получаете 9 здесь.

0

for Петли в Python не создают новую область; имя, которое вы используете для хранения текущего значения в цикле, будет сохраняться после завершения цикла и сохранит последнее значение, которое оно имело во время работы цикла.