2013-12-01 2 views
1

мне нужно сделать следующее:Python: Матрица ж/Последовательные значения

  1. Создайте переменную результат как массив длины т.
  2. Для каждого ряда i от 0 до m-1:

    a. Задайте результат [i] в ​​новый массив длины n.

    b. Для каждого столбца j в строке i установите этот элемент в (i * n) + j.

  3. Когда вы вычислили все элементы, верните результат.

До сих пор у меня есть следующие:

 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

Какую ошибку это приведет? Отправьте полный трафик. – user2357112

+0

Вам действительно нужно выполнить последовательность вещей, которые вы указали, или вам просто нужно создать вложенный список m-by-n, чьи элементы являются целыми числами от 0 до m * n, в последовательности? – user2357112

ответ

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 

Надеется, что это helsp!

+0

'TypeError: объект типа 'int' не имеет len()' –

+0

@KDawG Упс, исправлено. – aIKid

+0

У вас есть переменные 'm' и' n'. Почему неудобный диапазон? – user2357112

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 

 Смежные вопросы

  • Нет связанных вопросов^_^