[英]Python: Replacing item in a list of lists
这是我的代码:
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处替换元素,但是当我打印数据时,它并没有更改元素。
*******编辑******:好的,请输入我的完整代码:**
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]
对我来说效果很好...
>>> 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
>>>
您似乎已经选择了最后一行,这给我Python解释器一个错误。 如果我删除该标签,它将起作用。
您的阵列data
已更改。 也许您没有打印出来,所以您不知道它已更改?
您正在运行什么版本的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]]
>>>
我在您的代码中看到的唯一错误是,最后一行处于不同的缩进级别。 将其放在其余代码的相同级别上可以正常工作。 :)
您可能也对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]]
更容易阅读!
找到必要的元素后,您需要休息一下:
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]
啊...现在您已经发布了所有代码,这更有意义了...
之所以无法按您预期的方式工作,是因为在循环上下文之外不存在“元素”。 您需要将要使用的值存储在正确范围内的变量中。
它仍然适用于已编辑的代码。 我将代码的最后几行更改为此:
print "before =", data[x][y]
print "element =", element
data[x][y] = element
print "after =", data[x][y]
那些打印此:
before = 0
element = 9
after = 9
如前所述,for循环中element的最后一个值将是for循环完成后其值。 这就是为什么你在这里得到9。
Python中的for
循环不会创建新的作用域; 用于在循环中保存当前值的名称将在循环完成后保留,并保留循环运行时拥有的最后一个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.