繁体   English   中英

Python:替换列表中的项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM