Как распечатать горизонтальный список по вертикали? Более подробная информация внизу - PullRequest
1 голос
/ 07 марта 2020

Итак, последние пару месяцев я прохожу этот курс на Udacity.com с именем CS101. После того, как он закончил до 53%, мне был задан вопрос, который попросил меня написать алгоритм для очень простой головоломки судоку. Таким образом, что касается моего опыта и способа, которым я разработал алгоритм, я бы хотел, чтобы список печатался вертикально.

Например:

[[4,7,3],[1,8,2],[3,9,3]]

Я бы хотел, чтобы вышеприведенный список распечатывался как

[[4,1,3],[7,8,9],[3,2,3]]

Ответы [ 5 ]

3 голосов
/ 07 марта 2020

Вы можете использовать zip, который объединяет все i-й элемент каждого заданного списка:

values = [[4,7,3],[1,8,2],[3,9,3]]
values = list(zip(*values))
print(values) # [(4, 1, 3), (7, 8, 9), (3, 2, 3)]

Использование циклов:

result = [[] for _ in range(len(values[0]))]
for value in values:
    for jdx, val in enumerate(value):
        result[jdx].append(val)
print(result)
2 голосов
/ 07 марта 2020

Вы можете использовать zip здесь.

lst=[[4,7,3],[1,8,2],[3,9,3]]
print(list(zip(*lst)))
# [(4, 1, 3), (7, 8, 9), (3, 2, 3)]

Если вы хотите список списков

list(map(list,zip(*lst)))
# [[4, 1, 3], [7, 8, 9], [3, 2, 3]]
0 голосов
/ 07 марта 2020
def transpose(lst): 
    transpose_list =[[row[i] for row in lst] for i in range(len(lst[0]))] 
    return transpose_list 

lst = [[4,7,3],[1,8,2],[3,9,3]]
print(transpose(lst))

Вывод:

[[4, 1, 3], [7, 8, 9], [3, 2, 3]]

То же, что и:

tr_lst = []
for i in range(len(lst[0])):
    row_elem = []
    for row in lst:
        row_elem.append(row[i])
    tr_lst.append(row_elem)
print(tr_lst)

Алгоритм: Позволяет Возьмите пример:

[[4,7,3],[1,8,2],[3,9,3]]

1)

for row in lst:

1-й Я буду перебирать все строки [4,7,3], [1,8,2], [3,9,3] (есть три строки)

Тогда я буду возьмите 1-й элемент из каждой строки и добавьте их в list(row_elem) -> [4,1,3], который будет добавлен к tr_list

, затем возьмет 2-й элемент из каждой строки -> [7, 8, 9], который также будет добавлен к tr_list, а затем к третьему элементу -> [3, 2, 3]

. Используя for i in range(len(lst[0])):, я получаю доступ к i-му элементу.


Редактировать:

первая итерация for i in range(len(lst[0])):

row1: [<b>4</b>,7,3]
row2: [<b>1</b>,8,2]
row3: [<b>3</b>,9,3]

Эти <num> числа будут добавлены в список row_elem, теперь row_elem будет иметь [4, 1, 3] I добавит эти результаты (row_elem) в tr_list

tr_list прямо сейчас [<b>[4, 1, 3]</b>]

вторая итерация:

row1: [4,<b>7</b>,3]
row2: [1,<b>8</b>,2]
row3: [3,<b>9</b>,3]

row_elem будет [7,8,9], который будет добавлен к tr_list

tr_list будет [[4, 1, 3], <b>[7, 8, 9]</b>]

аналогично, для третьей итерации вы это сделаете.

row1: [4,7,<b>3</b>]
row2: [1,8,<b>2</b>]
row3: [3,9,<b>3</b>]

row_elem будет теперь [3,2,3], к которому добавится tr_list

tr_list будет [[4, 1, 3], [7, 8, 9], <b>[3, 2, 3]</b>]

0 голосов
/ 07 марта 2020

вы хотите транспонировать ваш список списков, вы можете использовать встроенную функцию map с zip:

l = [[4,7,3],[1,8,2],[3,9,3]]

list(map(list, zip(*l)))

output:

[[4, 1, 3], [7, 8, 9], [3, 2, 3]]

, если вы знакомы с numpy вы можете использовать:

import numpy as np

np.array(l).T.tolist()

вывод:

[[4, 1, 3], [7, 8, 9], [3, 2, 3]]

, если вы хотите использовать for петли:

len_cols = len(l[0])
len_rows = len(l)

transpose = [[None] * len_rows for _ in range(len_cols)]

for i in range(len_row):
    for j in range(len_cols):
        transpose[j][i] = l[i][j]

вывод:

[[4, 1, 3], [7, 8, 9], [3, 2, 3]]
0 голосов
/ 07 марта 2020

Псевдокод для вас, чтобы написать в python:

for column in matrix
  for item in column
    print item

Адрес другой:

for c from 0 to #cols
  for r from 0 to #rows
    print matrix[r][c]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...