печать двумерного массива в Python
Комбинация понимания списка и str присоединяется может выполнить задание:
inf = float('inf') A = [[0,1,4,inf,3], [1,0,2,inf,4], [4,2,0,1,5], [inf,inf,1,0,3], [3,4,5,3,0]] print('\n'.join([''.join([''.format(item) for item in row]) for row in A]))
0 1 4 inf 3 1 0 2 inf 4 4 2 0 1 5 inf inf 1 0 3 3 4 5 3 0
Использование for-loops с индексами обычно можно избежать в Python и не считается «Pythonic», потому что оно менее читаемо, чем его кузен Pythonic (см. ниже). Однако вы можете сделать это:
for i in range(n): for j in range(n): print ''.format(A[i][j]), print
Чем больше кузенец-питонов будет:
for row in A: for val in row: print ''.format(val), print
Однако это использует 30 операторов печати, тогда как мой первоначальный ответ использует только один.
Мне нужно уметь использовать данные для цикла. Кто-нибудь знает как это сделать? Я хочу включить большие циклы for в программу, над которой я работаю, но я хочу использовать индексы.
встроенное объединение в паре со строковым форматированием для элемента в итерируемой среде настолько красиво питонно. Читая как вычисленный, оператор создает предварительно отформатированную строку ‘<:4>‘.format for [каждого] `элемента в массиве [ row ]. Эти строки помещаются в массив (оператор окружен [] ), который затем является аргументом для ».join . Затем каждая из симпатичных линий ‘\ n’.join’ed
Всегда есть простой способ.
import numpy as np print(np.matrix(A))
Это не очень хороший ответ, если у вас есть матрица с большим количеством столбцов с плавающей точкой, это полностью испортит отображение
В любом случае вы не можете разместить матрицу 300×300 на своем экране. Попробуйте сбросить его в файл CSV. stackoverflow.com/questions/6081008/.
Я использовал numpy для создания массива, но список массивов списков должен работать аналогичным образом.
import numpy as np def printArray(args): print "\t".join(args) n = 10 Array = np.zeros(shape=(n,n)).astype('int') for row in Array: printArray([str(x) for x in row])
Если вы хотите напечатать только определенные индексы:
import numpy as np def printArray(args): print "\t".join(args) n = 10 Array = np.zeros(shape=(n,n)).astype('int') i_indices = [1,2,3] j_indices = [2,3,4] for i in i_indices:printArray([str(Array[i][j]) for j in j_indices])
Я не уверен, что это лучшее решение для этой конкретной проблемы (поскольку оно не имеет отношения к структуре массива), но вы также можете сделать что-то вроде: def print_join(*args): print «\t».join(str(arg) for arg in args) . Тогда он будет масштабироваться до любого количества аргументов, а не фиксироваться на 5.
где мат является переменной, относящейся к вашему объекту-матрице
с использованием индексов, для циклов и форматирования:
import numpy as np def printMatrix(a): print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" rows = a.shape[0] cols = a.shape[1] for i in range(0,rows): for j in range(0,cols): print "%6.f" %a[i,j], print print def printMatrixE(a): print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" rows = a.shape[0] cols = a.shape[1] for i in range(0,rows): for j in range(0,cols): print("%6.3f" %a[i,j]), print print inf = float('inf') A = np.array( [[0,1.,4.,inf,3], [1,0,2,inf,4], [4,2,0,1,5], [inf,inf,1,0,3], [3,4,5,3,0]]) printMatrix(A) printMatrixE(A)
Matrix[5][5] 0 1 4 inf 3 1 0 2 inf 4 4 2 0 1 5 inf inf 1 0 3 3 4 5 3 0 Matrix[5][5] 0.000 1.000 4.000 inf 3.000 1.000 0.000 2.000 inf 4.000 4.000 2.000 0.000 1.000 5.000 inf inf 1.000 0.000 3.000 3.000 4.000 5.000 3.000 0.000
Ещё вопросы
- 1 Невозможно определить тип SQL для . при создании таблиц с LinQ
- 0 JQuery обход и поиск текстовых полей
- 1 Скачать файл и сохранить на диск не работает
- 0 JQuery выберите раскрывающийся список выбранного значения
- 1 Как я могу удалить список языковых настроек в исходном уровне Android?
- 0 Разве Redis не должен кэшировать записи в БД?
- 0 Используйте Intel OpenCL.dll вместе с установкой NVIDA CUDA
- 0 Как я могу заполнить массив в datagridview?
- 0 угловой перехватчик не отклоняется
- 0 Как сдвинуть байты, используя формат Big Endian вместо Little Endian в C ++?
- 1 ловить исключение после doThrow JUNIT
- 1 Как добавить группировку и зависимость в @BeforeMethod On TestNG
- 1 Не удается открыть новое действие по методу onResponse of Volley
- 0 Расширение файла добавлено после отправки формы
- 0 как получить сообщение из следующих в этих таблицах
- 1 Что означает выполнение микрозадачи после каждого обратного вызова?
- 1 Как добавить p5.dom в p5.js в режиме экземпляра
- 0 Ошибка: [$ инжектор: itkn] Неверный токен впрыска! Ожидаемое имя службы в виде строки, неопределенное
- 0 Смена mp3 файла jplayer через ajax
- 1 Gradle обертка получить неверную версию Java в проекте Android на Windows
- 0 Тест на основе JSON — Распределение результатов SQL в многомерный массив
- 1 Загрузка файлов с помощью ExtJS и Jersey
- 0 Показать окно сообщения о блокировке
- 1 Элемент xmpmeta здесь не разрешен, когда я импортирую файл SVG
- 1 Java Lexical Analyzer
- 0 Как мне преобразовать ответ $ http.post в $ resource в angularjs?
- 0 Данные изображение не может показать
- 0 Горизонтальная прокрутка изображения с помощью запроса
- 0 Paul Irish Infinite Scroll загружает сразу 2 страницы
- 0 Извлечь из таблицы на основе значения префикса
- 0 Как создать оператор обновления с несколькими предложениями набора?
- 0 Как настроить вывод с помощью регулярного выражения в текстовой области
- 1 Как создать операцию между числами?
- 1 Добавление части кортежа в новый список
- 1 C # linq возможны рекомендации по множественному перечислению
- 0 Мой текст вращается, но фоновое изображение не
- 1 Как я могу вычесть и суммировать результаты всех массивов в массиве
- 1 hdf5storage.write () не сохраняет в указанный путь?
- 1 Захват сообщения окна и затем запуск кода
- 1 Некоторое сравнение байтов работает, только если я сначала регистрирую значения в Java
- 0 ошибка: у класса ‘Software’ нет поля с именем ‘ptr’
- 0 MySQL: выберите только некоторые сгруппированные строки со значениями, связанными с самым высоким ID
- 0 Динамическое воссоздание формы HTML / jQuery Mobile в jQuery
- 0 Я не могу управлять разными кнопками с разными именами
- 1 Как проверить, соответствует ли имя строки в dataframe имени столбца
- 1 Как перечитать новости на сайте с помощью magazine3k
- 0 Получить innerHTML из динамически добавленного тега скрипта
- 1 Экспорт таблицы Excel с сервера в JavaScript
- 0 Создание пула объектов
- 0 Элементы AngularJS 2 и SVG не отображаются
Двумерные массивы в Python и методы работы с ними
Иногда нам приходится использовать таблицы с данными для решения своих задач. Такие таблицы называются матрицами или двумерными массивами.
В Python подобные таблицы можно представить в виде списка, элементы которого являются другими списками. Для примера создадим таблицу с тремя столбцами и тремя строками, заполненными произвольными буквами:
mas = [['й', 'ц', 'у'], ['к','е','н'], ['г', 'ш', 'щ']] #Вывод всего двумерного массива print(mas) #Вывод первого элемента в первой строке print(mas[0][0]) # Выведет й #Вывод третьего элемента в третьей строке print(mas[2][2]) # Выведет щ
Создание двумерных массивов
Создать такой массив в Python можно разными способами. Разберем первый:
# Создание таблицы с размером 3x3, заполненной нулями a = 3 mas = [0] * a for i in range(a): mas[i] = [0] * a print(mas) # Выведет [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Второй способ предполагает создание пустого списка с добавлением в него новых списков. Рассмотрим на примере:
# Создание таблицы с размером 2x2, заполненной единицами
a = 2 mas = [] for i in range(a): mas.append([0] * a) print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Третьим и самым простым способом является генератор списков с x строками, которые будут состоять из y элементов. Пример:
# Создание таблицы с размером 3x3, заполненной двойками a = 3 mas = [[2] * a for i in range(a)] print(mas) # Выведет [[2, 2, 2], [2, 2, 2], [2, 2, 2]]
Способы ввода двумерных массивов
Допустим, нам нужно ввести двумерный массив после запуска нашей программы. Для этого мы можем создать программу, которая будет построчно считывать значения нашего массива, а также количество строк в нем. Рассмотрим на примере:
a=int(input()) mas = [] for i in range(a): mas.append(list(map(int, input().split()))) print(mas)
Запускаем программу и сначала вводим количество строк в массиве (допустим, 3). Далее вводим строки в порядке их очереди. Например:
После этого данная программа выведет наш двумерный массив: [[1, 1, 1], [1, 1, 1], [1, 1, 1]].
То же самое можно сделать с помощью генератора двумерных массивов:
mas = [list(map(int, input().split())) for i in range(int(input()))] # Вводим 3 1 1 1 1 1 1 1 1 1 print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Вывод двумерных массивов
Для обработки и вывода списков используются два вложенных цикла. Первый цикл – по порядковому номеру строки, второй – по ее элементам. Например, вывести массив можно так:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in range(0, len(mas)): for i2 in range(0, len(mas[i])): print(mas[i][i2], end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
То же самое можно сделать не по индексам, а по значениям массива:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: for i2 in i: print(i2, end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1
Способ с использованием метода join():
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: print(' '.join(list(map(str, i)))) # Выведет 1 1 1 1 1 1 1 1 1
Вывод одной из строк двумерного массива можно осуществить с помощью цикла и того же метода join(). Для примера выведем вторую строку в произвольном двумерном массиве:
mas = [[1, 1, 1], [2, 2, 2], [3, 3, 3]] string = 2 for i in mas[string-1]: print(i, end=' ') # Выведет 1 1 1
Для вывода определенного столбца в двумерном массиве можно использовать такую программу:
mas = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] column = 2 for i in mas: print(i[column-1], end=' ') # Выведет 2 5 8
Обработка двумерных массивов
Составим произвольный двумерный массив с числами и размерностью 4×4:
2 4 7 3 4 5 6 9 1 0 4 2 7 8 4 7
Теперь поставим числа в каждой строке по порядку:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: mas2.append(sorted(i)) print(mas2) # Выведет [[2, 3, 4, 7], [4, 5, 6, 9], [0, 1, 2, 4], [4, 7, 7, 8]]
А теперь расставим все числа по порядку, вне зависимости от их нахождения в определенной строке:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: for i2 in i: mas2.append(i2) mas=sorted(mas2) for x in range(0, len(mas), 4): e_c = mas[x : 4 + x] if len(e_c) < 4: e_c = e_c + [None for y in range(n - len(e_c))] print(list(e_c)) # Выведет [0, 1, 2, 2] [3, 4, 4, 4] [4, 5, 6, 7] [7, 7, 8, 9]
Итог
Мы разобрались в основах двумерных массивов в Python, научились создавать, вводить и выводить их, а также рассмотрели примеры обработки. Надеюсь, статья оказалась полезной для вас!
Печать двумерного списка по строкам и столбцам в 2.7
Но к сожалению такой формат записи выводит мне каждую строку в виде столбца. Как нужно правильно записывать вывод, для получения желаемого результата?Я думаю, что нужно все элементы в строку скапливать и выводить их так, но почему-то записать это правильно не смог (Пользуюсь версией 2.7.11)
Сортировка двумерного массива по строкам и по столбцам
Я незнаю как сделать лабу №14 а из за этого ещё и 2 лабы неполучаются помогите. Вот условия : .
Сортировка двумерного массива по строкам и по столбцам (методом вставки, обмена и выбора)
Завтра зачёт по информатике я не знаю как сделать 3 программы помогите, вот условия: 1: это лаба.
Ввод по строкам с клавиатуры двумерного массива и вычисление суммы его элементов по четным столбцам
Нужно написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму.
from __future__ import print_function
Сообщение от Whost
Спасибо, помогло А есть ли смысл переходить на последние версии питона, чтобы избежать таких вот ошибок? Просто мне говорили, что 2.7 является самой стабильной версией.
Здесь я так понял многого просто так делать нельзя? Я пытался создавать какую-то отдельную строку и все сумировать в нее, но при использовании каких-то функций, как append или других, так же получаю ошибки