我需要做以下事情:
对于从0到m-1的每一行:
一个。将result [i]设置为长度为n的新数组。
湾对于第i行中的每个列j,将该元素设置为(i * n)+ j。
到目前为止,我有以下内容:
def f2(m, n):
result = [""] * m
for i in range(0, m):
result[i] = [""] * n
for i in result:
for j in i:
result.append(i*n+j)
return result
然而,这只会导致错误。
任何帮助/建议?谢谢
答案 0 :(得分:1)
使用列表comprehension:
def f2(m, n):
return [[i*n+j for j in range(n)] for i in range(m)]
答案 1 :(得分:0)
你走了:
def f2(m, n):
#First, let's create a list with the size of m, and
#each row with the size of n.
result = [[0 for _ in range(n)] for _ in range(m)]
#now, you can loop through it easily.
for i in range(m): #outer list
for j in range(n): #inner list
result[i][j] = i*n+j #put it there :)
return result
希望这有帮助!
答案 2 :(得分:0)
for i in result:
for j in i:
在这个嵌套循环中,i
遍历result
和j
行迭代单元格内容。因此,在循环体中:
result.append(i*n+j)
此行尝试将行乘以n
,将j
(字符串)添加到该行,并将其输出附加到result
。没有任何一部分是你想要做的。您可以通过迭代索引并分配给元素而不是追加来解决这个问题:
for i in range(m):
for j in range(n):
result[i][j] = i*n+j
但是使用range
以你想要的方式构建整个数组更容易,而不是用垃圾初始化它并分配元素:
def f2(m, n):
return [range(n*i, n*i+n) for i in xrange(m)]
或者如果您使用的是Python 3:
def f2(m, n):
return [list(range(n*i, n*i+n)) for i in range(m)]
或者如果列表推导对您来说很奇怪且不可读:
def f2(m, n):
result = []
for i in range(m):
result.append(list(range(n*i, n*i+n)))
return result