#python #arrays #multidimensional-array
#python #массивы #многомерный массив
Вопрос:
Я написал следующий код:
for row in range(len(listOfLists)):
print(' ' '- '*len(listOfLists))
print('|', end='')
for col in range(len(listOfLists[row])):
print(listOfLists[row][col], end='|')
print(' ') #To change lines
print(' ' '- '*len(listOfLists))
Ввод:
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]
Вывод:
- - - - |a|b|c| - - - - |d|e|f| - - - - |g|h|i| - - - - |j|k|l| - - - -
Желаемый результат:
- - - |a|b|c| - - - |d|e|f| - - - |g|h|i| - - - |j|k|l| - - -
Который печатает ‘ — ‘ вокруг элементов 2D-массива.
Однако мой код работает только для квадратного массива (n ^ 2).
Как я могу обобщить его, чтобы он работал для любого варианта массива (если все списки имеют одинаковую длину)
Спасибо
Комментарии:
1. пожалуйста, сделайте отступ в своем коде
2. Не могли бы вы, пожалуйста, правильно отформатировать код и привести пример того, что вы получаете и чего хотите?
3. @vishes_shell это тоже 🙂
4. @345243lkj Извините!!! Я исправил это! 🙂
5. @vishes_shell Мне очень жаль за неясный формат. Я исправил это сейчас! 🙂
Ответ №1:
Ваша проблема заключалась в том, что len(listOfLists)
это использовалось для размера печатаемой таблицы в обоих направлениях. len(listOfLists)
по умолчанию используется количество строк, при этом len(listOfLists[0])
вы получаете количество столбцов.
listOfLists = [['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l']]
for row in range(len(listOfLists)):
print(' ' '- '*len(listOfLists[0]))
print('|', end='')
for col in range(len(listOfLists[row])):
print(listOfLists[row][col], end='|')
print(' ') #To change lines
print(' ' '- '*(len(listOfLists[0])))
вывод:
- - -
|a|b|c|
- - -
|d|e|f|
- - -
|g|h|i|
- - -
|j|k|l|
- - -
Счастливого кодирования!
Комментарии:
1. Хороший улов. Исправлено, чтобы учесть это
2. @345243lkj Большое вам спасибо! 🙂
Ответ №2:
Вы печатаете этот разделитель на основе количества строк, а не количества столбцов. Использование дополнительных тестовых примеров помогает немедленно выполнить отладку.
def printListOfLists(listOfLists):
for row in range(len(listOfLists)):
print(' ' '- ' * len(listOfLists[0]))
print('|', end='')
for col in range(len(listOfLists[row])):
print(listOfLists[row][col], end='|')
print(' ') # To change lines
print(' ' '- ' * len(listOfLists[0]))
printListOfLists([
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l']
])
printListOfLists([['a', 'b', 'c']])
printListOfLists([['a'], ['b'], ['c']])
Теперь ожидаются все полученные результаты:
- - -
|a|b|c|
- - -
|d|e|f|
- - -
|g|h|i|
- - -
|j|k|l|
- - -
- - -
|a|b|c|
- - -
-
|a|
-
|b|
-
|c|
-
Комментарии:
1. Большое вам спасибо за вашу помощь!
Ответ №3:
def awesome_print(listOfLists):
for row in range(len(listOfLists)):
print(' ' '- '*len(listOfLists[row]))
print('|', end='')
for col in range(len(listOfLists[row])):
print(listOfLists[row][col], end='|')
print(' ') #To change lines
print(' ' '- '*len(listOfLists[row]))
awesome_print([[1,2,3], [1,2,3], [2,3,0], [2,3,4]])
Вывод
- - -
|1|2|3|
- - -
|1|2|3|
- - -
|2|3|0|
- - -
|2|3|4|
- - -
В случае, если вам нужно распечатать данные с нефиксированным размером подмассивов
def awesome_print2(listOfLists):
for row in range(len(listOfLists)):
print(' ' '- '*len(listOfLists[row]))
print('|', end='')
for col in range(len(listOfLists[row])):
print(listOfLists[row][col], end='|')
print()
print(' ' '- '*len(listOfLists[row]))
awesome_print2([[1,2,3,5], [1,2,3], [2,3,0,6,3], [2,3,4]])
Вывод:
- - - -
|1|2|3|5|
- - - -
- - -
|1|2|3|
- - -
- - - - -
|2|3|0|6|3|
- - - - -
- - -
|2|3|4|
- - -
Комментарии:
1. Кажется, что между каждой строкой есть дополнительное пространство. Последний оператор print должен находиться вне цикла for, чтобы избежать этого (если это не было сделано намеренно)
2. Большое спасибо за вашу помощь! 🙂