Передать список

Предположим, что у меня есть вложенный список m = [[2, 3], [4, 7]] и я хочу перенести его так, чтобы получить [[2, 4], [3, 7]] ИЛИ, если m может быть [[1,2,3],[4,5,6],[7,8,9]] то, пройдя через функцию транспонирования, я должен получить [[1,4,7],[2,5,8],[3,6,9]] Он также должен работать для [[1,2,3],[4,5,6]] который возвращает [[1,4],[2,5],[5,6]]

 def transpose(m): t = make_copy(m) ##[[2, 3], [4, 7]] if len(t) == 1: ## if [[1]] return t ##[[1]] i = 0 while i <= len(t): #0 <= 2 t[0][i] = t[i][0] #t[0][0] = t[0]t[0] ## t[0][1] = t[1][0] so now 3 = 4 i += 1 #1 return t 

Я думал, что это должно сработать, но это не дало мне ответа, который я хочу. Что не так ?

Использовать функцию zip

 print zip(*[[2, 3], [4, 7]]) # [(2, 4), (3, 7)] 

Итак, ваша функция транспонирования становится такой

 def transpose(m): return zip(*m) assert transpose([[2, 3], [4, 7]]) == [(2, 4), (3, 7)] assert transpose([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == [ (1, 4, 7), (2, 5, 8), (3, 6, 9)] 

Помните, что он просто возвращает список кортежей. Они могут использоваться почти взаимозаменяемо, за исключением фактов, что синтаксисы для их создания различны, а кортежи неизменны.

Если вы действительно хотите получить только список списков, у вас есть понимание или функция map , например

 def transpose(m): return [list(item) in zip(*m)] # return map(list, zip(*m)) assert transpose([[2, 3], [4, 7]]) == [[2, 4], [3, 7]] assert transpose([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == [ [1, 4, 7], [2, 5, 8], [3, 6, 9]] assert transpose([[1, 2, 3], [4, 5, 6]]) == [[1, 4], [2, 5], [3, 6]]