2017-01-12 2 views
0
def transpose(matrix): 
    n=0 
    while n < (len(matrix)): 
     li = [] 
     for sets in matrix: 
      li.append(sets[0]) 
     n += 1 
     print(len(matrix)) 
     return li 
transpose([[1,2,3],[4,5,6],[7,8,9]]) 

В настоящее время возвращает [1,4,7] Wanted результат [[1,4,7], [2,5,8], [3,6,9]]Почему мой цикл while заканчивается через один раунд?

+0

Функция 'return' заканчивается - вы должны использовать' return' после цикла while. – furas

+0

Так как вы его закодировали - вы выполняете инструкции в цикле, а последнее утверждение - 'return'. – MattDMo

+0

В результате я получаю только [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

ответ

6

У вас есть return в течение вашего времени, поэтому функция возвращается после достижения этой точки. Вы должен dedent ваше возвращение на тот же уровень, что и время:

def transpose(matrix): 
    n = 0 
    li = [] 
    while n < (len(matrix)): 
     ... 
    return li 

Вы также мог бы заменить время цикла и счетчик n с для цикла, который перебирает на range(len(matrix)), так что вы можете спокойно отказаться от n, а затем перейти инициализация li вне цикла:

def transpose(matrix): 
    li = [] 
    for i in range(len(matrix)): 
     inner_li = [] 
     for sets in matrix: 
      inner_li.append(sets[i]) 
     li.append(inner_li) 
    return li 

Я предлагаю вам принять популярный рецепт для транспонирования матриц, чтобы сделать код понятнее:

def transpose(matrix): 
    return list(zip(*matrix)) 

>>> transpose([[1,2,3],[4,5,6],[7,8,9]]) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 
+0

В результате я получаю только [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

+0

Я обновил свой ответ с исправлением для вашего исходного кода. –

+1

Спасибо за помощь, которая заставила его работать с моим циклом while. Я ценю вашу помощь! –

1

отступа вопросы. Кроме того, список li инициализировался в неправильном месте.

def transpose(matrix): 
    n=0 
    li = [] 

    while n < (len(matrix)): 
     for sets in matrix: 
      li.append(sets[0]) 
     n += 1 
     print(len(matrix)) 
    return li 
+0

В результате я получаю только [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

1

Я полагаю, вы знаете это, но только в том случае, это может быть достигнуто с NumPy

import numpy as np 
A = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
print A.T 
0

Ваша первая ошибка является отступом return. Второй имеет 0 вместо n в пределах sets[...]. Третий - переписывание значения li в каждом цикле while. Вот как это работает:

def transpose(matrix): 
    n=0 
    li = [] 
    while n < (len(matrix)): 
     li.append([]) 
     for sets in matrix: 
      li[-1].append(sets[n]) 
     n += 1 
     print li 
    return li 


transpose([[1,2,3],[4,5,6],[7,8,9]]) 

Не беспокойтесь об этом. Вы станете быстрее и менее подвержены ошибкам, если вам любопытно, и попробуйте все:

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