def createOneRow(width):
""" returns one row of zeros of width "width"...
You should use this in your
createBoard(width, height) function """
row = []
for col in range(width):
row += [0]
return row
def createBoard(width,height):
"""creates a list
"""
row = []
for col in range(height):
row += createOneRow(width),
return row
import sys
def printBoard(A):
""" this function prints the 2d list-of-lists
A without spaces (using sys.stdout.write)
"""
for row in A:
for col in row:
sys.stdout.write(str(col))
sys.stdout.write('\n')
以上是基本功能,然后我被要求执行复制功能以跟踪原始A
。
def copy(A):
height=len(A)
width=len(A[0])
newA=[]
row=[]
for row in range(0,height):
for col in range(0,width):
if A[row][col]==0:
newA+=[0]
elif A[row][col]==1:
newA+=[1]
return newA
然后我尝试printBoard(newA)
,然后出现错误:
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
printBoard(newA)
File "/Users/amandayin/Downloads/wk7pr2/hw7pr2.py", line 35, in printBoard
for col in row:
TypeError: 'int' object is not utterable
有人可以告诉我为什么这是一个错误吗?
答案 0 :(得分:1)
这是我的解决方案,我测试过:
def copy(a):
return [row[:] for row in a]
如果这不是作业,请使用copy.deepcopy()
:
import copy
b = copy.deepcopy(a)
答案 1 :(得分:0)
您的功能copy
不正确。这段代码:
def copy(A):
height=len(A)
width=len(A[0])
newA=[]
row=[]
for row in range(0,height):
for col in range(0,width):
if A[row][col]==0:
newA+=[0]
elif A[row][col]==1:
newA+=[1]
return newA
a = [
[1, 1, 0],
[0, 1, 1],
]
print a
print copy(a)
打印出来:
[[1, 1, 0], [0, 1, 1]]
[1, 1, 0, 0, 1, 1]
如您所见,它不包含子列表,因此它会尝试迭代整数。
使用copy.deepcopy
的事情可以胜任。
答案 2 :(得分:0)
我认为你没有正确复制列表。
您的原始列表如下所示:
[[1,2,3],[4,5,6],[7,8,9]]
复制时,您将创建一个名为newA的新列表:
[]
你只需要添加元素:
[1,2,3,4,5,6,7,8,9]
所以你的列表格式不同。
这可能是你想要的:
newA=[]
row=[]
for row in range(0,height):
newRow = []
for col in range(0,width):
if A[row][col]==0:
newRow+=[0]
elif A[row][col]==1:
newRow+=[1]
newA += [newRow]
答案 3 :(得分:0)
您没有提供足够的代码来重现问题,但我可以告诉您错误的含义。这意味着,在表达式for col in row:
中,row
实际上是int
而不是某种iterable
类型。
答案 4 :(得分:0)
试过运行它并注意到CreateBoard中的increment语句末尾有一个逗号:
row += createOneRow(width),
增加newA时,CopyA方法中缺少此项。我尝试在这些行中添加一个逗号,没有错误。