1)如果我这样做:
tablero = [[' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '
'], [' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' '], ['
', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ']]
def dibujar_cruz():
x = 0
a = "X"
size = len(tablero)
for row in tablero:
tablero[x][x] = a
tablero[x][size-x-1]=a
x += 1
for l in tablero:
print (" ".join(l))
dibujar_cruz()
我获得:
2)但是,如果函数“ dibujar_cruz()”从另一个函数中获取初始嵌套列表,如下所示:
tablero =[]
def construir_tablero():
size =int(input("Which is the size of the nested lists? "))
col=[]
for x in range (size):
col .append(" ")
for b in range(size):
tablero.append(col)
return (tablero)
print (construir_tablero())
def dibujar_cruz():
x = 0
size = len(tablero)
for row in tablero:
row [x]= "X"
row[size-x-1]="X"
x += 1
for l in tablero:
print (" ".join(l))
dibujar_cruz()
我获得:
Square obtained calling the two functions consecutively
当我期望与第1点具有相同的恒星时。
3)如果我定义了第三个调用前两个函数的函数:
def construir_cruz():
construir_tablero()
dibujar_cruz()
construir_cruz()
我希望获得与1)中相同的星星,但出现错误:
... row [size-x-1] =“ X”
IndexError:列表分配索引超出范围
2)和3)中的结果对我来说是意外的。我为什么要得到它们?
答案 0 :(得分:0)
正如IljaEverilä在评论中强调的那样,您的数组tablero
包含同一数组col
的X个副本,但这是按引用而不是按值的副本。因此,每次您修改tablero
中的一列时,更改都会出现在每一列中。
解决方案是按值复制col
。只需更改:
tablero.append(col)
收件人:
tablero.append(col[:])
答案 1 :(得分:0)
第3点)中的问题是重复功能
tablero = []
def construir_tablero():
size =int(input("Which is the size of the nested lists? "))
col=[]
for x in range (size):
col .append(" ")
for b in range(size):
tablero.append(col)
return (tablero)
它的内存中已经有一个 tablero 。 从以下位置更改 tablero 的定义位置:
def construir_tablero():
tablero =[]
size =int(input("Which is the size of the nested lists? "))
col=[]
for x in range (size):
col .append(" ")
for b in range(size):
tablero.append(col)
return (tablero)
到
registry.addEndpoint("/api/v1", "/api/v2")
解决了该问题,因为它在每个调用中重新定义了 tablero 。