Python:Matrix w / Sequential Values

时间:2013-12-01 07:11:54

标签: python arrays matrix sequential

我需要做以下事情:

  1. 创建一个长度为m。
  2. 的数组的变量结果
  3. 对于从0到m-1的每一行:

    一个。将result [i]设置为长度为n的新数组。

    湾对于第i行中的每个列j,将该元素设置为(i * n)+ j。

  4. 当您计算完所有元素后,返回结果。
  5. 到目前为止,我有以下内容:

         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
    

    然而,这只会导致错误。

    任何帮助/建议?谢谢

3 个答案:

答案 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遍历resultj行迭代单元格内容。因此,在循环体中:

        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