Работа со списками и массивами
Работа со списками и массивами
Списки относятся к данным множественного типа. Они имеют большое значение при обработке массивов данных и служат основой для создания векторов и матриц. В этом разделе мы познакомимся со свойствами списков, их созданием (генерацией) и использованием.
Списки и их свойства
Часто математические или иные объекты содержат множество данных, которые желательно объединять под общим именем. Например, под объектом с именем М можно подразумевать квадратную матрицу размером 10×10 с общим числом элементов, равным 100. Человека с именем Victor, например, можно характеризовать целым списком разных данных — символьными фамилией, именем и отчеством, целочисленным годом рождения, вещественным ростом, объемом груди и т. д.
Для объединения данных могут использоваться списки (list). Mathematica имеет обширные возможности работы с объектами-списками, содержащими не только однотипные, но и разнотипные элементы. В частности, элементами списков могут быть числа, константы, переменные, выражения и даже сами списки. Списки используются для конструирования более частных типов данных — массивов, матриц и векторов [87].
На языке данной системы список — это совокупность произвольных данных, указанных в фигурных скобках, например: {1, 4, 2, 7, 9} или {а, Ь, с, d, e, sin[x], ln[y], "string"}
Возможно задание списков в списке, например, так:
{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
Такой список представляет матрицу
1 2 3
4 5 6
7 8 9
Однако, чтобы вывести список в такой матричной форме, надо использовать после списка выражение //MatrixForm.
На рис. 3.7 показан еще один способ задания списка или матрицы — с помощью функции List:
- List [a, b, с,…] — создает список {а, b,, с,…};
- List [ {а,b, с,…}, {d,e, f,…}, {i, k, 1,…} ] — создает список — матрицу { {a,b, с,…}, {d,e, f,…}, {i, k, 1,…} }.
Списки можно составлять, непосредственно задавая объекты в соответствии с описанным синтаксисом. Однако можно и генерировать некоторые виды списков, таких как таблицы. Списки могут быть объектами присваивания переменным, например
V:={1, 2, 3, 4, 5}
Списки характеризуются размером, который представляет собой произведение числа элементов списков по каждому направлению (размерности). Например, одномерный список является вектором и характеризуется числом элементов по единственному направлению. При этом вектор может быть вектором-строкой или вектором-столбцом. Двумерный список представляет матрицу, имеющую m строк и n столбцов. Ее размер равен mxn. Если m=n, то матрица называется квадратной. Трехмерный список можно представить в виде параллелепипеда, содержащего mxnxp элементов. Списки большей размерности трудно наглядно представить, но они вполне возможны. Напомним, что имена векторов и матриц в данной книге обозначены жирными символами, например, V для вектора и М для матрицы.
Генерация списков
Для генерации списков с элементами, являющимися вещественными и целыми числами или даже целыми выражениями, часто используется функция Table, создающая таблицу-список:
- Table [expr, {imax} ] — генерирует список, содержащий imax экземпляров выражения ехрг;
- Table [expr, {i, imax} ] — генерирует список значений ехрг при 1, изменяющемся от 1 до imax;
- Table [expr, {i, imin, imax}] — генерирует список значений ехрг при i, изменяющемся от imin до imax;
- Table [expr, {i, imin, imax, di} ] — использует шаг приращения i, равный di;
- Table[expr, {i, imin, imax}, {j, jmin, jmax},…] —возвращает вложенный список. Самым внешним является список по переменной i.
Ниже приводятся примеры использования функции Table (первая строка каждого примера — ввод, следующая — вывод).
Пример |
Комментарий |
Table[i*j,{i,l,3},{j,l,3}] |
Генерация матрицы размером |
Table[N[Exp[i]], {1,0, 2,0.5}] |
Генерация пяти значений Е ^ 1 численном виде |
Table[Exp[i],{i,l,5}] |
Генерация пяти значений Е ^ i (i=l, 2, 3,4 и 5) |
Table[Exp[i],{5}] {е i , е i , е i , е i , е i } |
Генерация пяти значений Е ^i |
Применяется также функция Range, которая предназначена для создания так называемых числовых списков, значения которых равномерно распределены в некотором заданном диапазоне:
- Range [imax] — генерирует список числовых элементов {1, 2, …, imax};
- Range [imin, imax] — генерирует список числовых элементов {imin, …,
- Range [imin, imax, di] — генерирует список числовых элементов от imin до imax с шагом di.
Примеры использования функции Range.
Пример |
Комментарий |
Range [5] |
Генерация пяти целых чисел |
Range[0,2,0.5] |
Генерация чисел пяти вещественных |
Выделение элементов списков
Для выделения элементов списка list используются двойные квадратные скобки:
- list [ [i] ] — выделяет i-й элемент списка;
- list [ [ { i, j , —.}]] — выделяет i-й, j-й и т. д. элементы списка.
Ниже приведены примеры выделения элементов списков.
Пример |
Комментарий |
11:={1,2,3,4,5) |
Задание исходного списка 11 |
11[[3]] |
Выделение третьего элемента |
3 |
|
11[[{1,2,5}]] |
Выделение первого, второго и пятого элементов |
(1, 2, 5} |
|
12={{1,2,3},{4,5,6}} |
Задание сдвоенного (двумерного) списка |
{{1, 2, 3}, {4, 5, 6}} |
|
TableForm[12] |
Вывод сдвоенного списка в табличной форме |
1 2 3 |
|
4 5 6 |
|
L2[[2,3]] |
Выделение элемента сдвоенного списка |
6 |
Для выделения заданного z’-ro элемента списка list используется также функция Part [list, i]. При i>0 отсчет номеров элементов идет с начала списка, а при i<0 — с его конца. Это правило поясняют следующие примеры:
L:={l,2,3,a,b,c}
{Part[L,2],Part[L,5],Part[L,6]}
{2, b, с}
{Part[L,-2],Part[L,-5],Part[L,2]}
{b, 2, 2}
Функция Part может использоваться для выбора заданного элемента выражения из списка. В этом случае вместо i надо указать три числа — номер выражения как элемента списка, уровень выражения и порядковый номер извлекаемого из
выражения объекта. Показанные на рис. 3.8 примеры иллюстрируют работу со списком, последним (четвертым) элементом которого является математическое выражение.
Обратите внимание на то, что в последнем примере неверно задан уровень выражения — использованное выражение имеет только один (первый) уровень. Поэтому задание второго уровня вызывает появление сообщения об ошибке.
Функция Select используется для выделения элементов списка, удовлетворяющих заданному критерию:
- Select [list, crit] — выбирает все элементы ei списка list, для которых функция критерия crit [ei] имеет значение True;
- Select [list, crit, n] — выбирает первые п элементов, для которых critfei] есть True.
Ниже представлены примеры применения этой функции:
Select[{1,а,2,b,3,c},NumberQ]
{1, 2, 3}
Select[{l,a,2,b,3,c),NumberQ,2]
{1, 2}
Select[{l,a,2,b,3,c},PrimeQ]
{2, 3}