Опубликован: 03.12.2012 | Доступ: свободный | Студентов: 1102 / 247 | Длительность: 16:43:00
Лекция 4:

Работа со списками

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >

3.7. Работа со строками

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

StringLength[str] возвращает длину (число символов) строки.

StringReverse[str] осуществляет запись символов строки в обратном порядке.

Функции Take[str,cond] и Drop[str,cond] позволяют обратиться к символам, имеющим заданные условиями cond номера, причём условия cond определяются так же, как и в соответствующих функциях для списков.

StringPosition[str,expr] показывает номер позиции выражений expr в строке str.

StringInsert[str,expr,n] добавляет выражение expr в строку str на позицию с номером n.

StringReplace[str,expr->expr2] заменяет в строке str выражение expr1 выражением expr2.

Примеры использования описанных выше функций см. на рис. 3.25.

Работа со строками

Рис. 3.25. Работа со строками

Функция Characters[str] позволяет конвертировать строку str в список. Однако элементами полученного списка будут не символы, содержащиеся в исходной строке, а строки, содержащие каждый символ в отдельности, т.е., функция Characters преобразует некоторую строку "abcdefg" в список {"a","b","c","d","e","f","g"} — см. примеры In[1] и In[2] на рис. 3.26.

Преобразовать список в строку позволяет функция StringJoin[list] — пример In[3] на рис. 3.26.

Подробней о работе со строками см. книгу П. Веллина и др. [14, с. 70–72].

Преобразование строк в списки и списков в строки

Рис. 3.26. Преобразование строк в списки и списков в строки

Ключевые термины

Вложенный списоксписок, элементами которого являются другие списки.

Внутренний списоксписок, являющийся элементом вложенного списка.

Глубина вложенного списка — число уровней вложенного списка.

Длина списка — число элементов списка.

Итераторобъект, указывающий на расположенные определённым образом элементы в наборе данных.

Список — форма структурирования данных, по строению представляющая собой множество элементов, заключённых в фигурные скобки и разделённых запятыми.

Краткие итоги

В данной лекции мы подробно познакомились с третьим классом данных Mathematica — списками. Мы научились задавать списки, как вручную, так и пользуясь широким спектром предназначенных для этого встроенных функций Mathematica. Мы познакомились с такими сложными объектами, как вложенные списки, также принципами их задания и работы с ними. Мы научились выявлять структуру списков, извлекать информацию о количестве и характере их элементов, о количестве уровней вложенных списков. Мы познакомились с встроенными функциями Mathematica, позволяющими избирательно обращаться к требуемым элементам списков, модифицировать списки. Мы узнали, какой эффект оказывает на результат вычислений применение к спискам математических функций. Мы более подробно познакомились с возможностями работы в системе Mathematica с такими объектами математики, как векторы и матрицы. Мы также научились более умело работать с объектами очень близкого по структуре к спискам класса данных Mathematica — строками.

Вопросы

  1. Что такое список в Mathematica?
  2. Какие типы скобок используются при задании списков и работе с ними?
  3. Какие функции Mathematica предназначены для создания списков?
  4. В каком виде может быть задан итератор функции Table?
  5. Что такое вложенный список?
  6. Раскройте отличие между количеством уровней списка и количеством уровней внутренней формы выражения?
  7. Что такое длина и глубина списка? Каким образом можно их "измерить"?
  8. Какие функции Mathematica позволяют узнать, содержатся ли в списке те или иные выражения; позволяют выбрать из списка те или иные выражения?
  9. Назовите функции Mathematica, позволяющие изменять списки. Какие действия они оказывают на списки?
  10. Какие функции Mathematica используются при работе с одноуровневыми (векторы) и двухуровневыми (матрицы) списками? Для каких целей?
  11. Перечислите функции Mathematica, позволяющие работать со строками как со списками.

Упражнения

  1. Создайте при помощи функции Table следующие списки:

    {{1},{1,3},{1,3,5},{1,3,5,7},{1,3,5,7,9},{1,3,5,7,9,11}}

    {{1,3,5,7,9,11},{3,5,7,9,11},{5,7,9,11},{7,9,11},{9,11},{11}}

    {{11,9,7,5,3,1},{9,7,5,3,1},{7,5,3,1},{5,3,1},{3,1},{1}}

    {{11,9,7,5,3,1},{11,9,7,5,3},{11,9,7,5},{11,9,7},{11,9},{11}}

  2. Создайте одномерный список из 10 элементов, которые случайным образом принимают значения
    • +5, 0 и -5;
    • +5 и -5 (один из способов — сгенерировать список бинарных значений 0 и 1, которые заменить соответствующим образом заданной парой значений)
  3. При помощи функции Array создайте список {{f[1,1],f[1,2],f[1,3]},{f[2,1],f[2,2],f[2,3]},{f[3,1],f[3,2],f[3,3]},{f[4,1],f[4,2],f[4,3]}}. Точно такой же список создайте при помощи функции Table.
  4. Из списка {1,-3,a,0,{a},b,0,0,{},1,{a,-3},-3,b,1} исключите
    • все нулевые элементы;
    • все элементы, являющиеся отрицательными числами;
    • все символьные выражения;
    • все выражения, не являющиеся символами.
  5. Преобразуйте вложенный список {{a,1},{b,2},{c,3},{d,4},{e,5}} в два списка {1,2,3,4,5} и {e,d,c,b,a}.
  6. Создайте список, элементами которого выступают буквы вашего имени, отчества и фамилии (например, {и,в,а,н,и,в,а,н,о,в,и,ч,и,в,а,н,о,в}).

    Выполните следующие задания (в скобках указаны функции Mathematica, которыми следует пользоваться при выполнении задания).

    • узнайте, встречаются ли в списке буквы "а", "е", "о ", "и"; если встречаются, то сколько раз и под какими номерами (FreeQ, MemberQ, Count, Position);
    • из исходного списка сформируйте список, содержащий в качестве элементов одну из этих букв (Select, Take);
    • замените в исходном списке все гласные числом 1, а согласные — числом 0 (ReplacePart, Delete, Insert);
    • из исходного списка сформируйте список, содержащий в качестве элементов только буквы отчества (Delete, Drop);
    • из списка, полученного в пункте (г), сформируйте новый список, добавив к нему буквы имени и фамилии (Append, Prepend);
    • ) поменяйте порядок следования имени, отчества и фамилии в полученном в пункте (д) списке (RotateLeft, RotateRight).
  7. Убедитесь в том, что выражения {x-5,2*y+h,z} и {7*x-5,y+2*y^2,0.1z-Sqrt[z]} являются векторами, затем, не пользуясь функциями Dot, Cross, найдите их скалярное и векторное произведение. При помощи функций Dot, Cross проверьте результат.
  8. Убедитесь в том, что выражение {{g,6,u},{4,j,9},{f,2,4}} является матрицей, найдите её определитель и постройте соответствующую ей транспонированную матрицу.
< Лекция 3 || Лекция 4: 123456 || Лекция 5 >