MATLAB эквивалентно Python's string.join () - PullRequest
11 голосов
/ 16 декабря 2011

В Python я могу легко объединить содержимое списка строк, разделенных набором символов, следующим образом:

>>> L = ["A","B","C"]
>>> string.join(L,"_")
'A_B_C'

В MATLAB я могу объединить массив ячеек строк таким образом:

>> L = {'A','B','C'};
>> [L{:}] % or strcat(L{:}), with trimming of trailing spaces

ans =

ABC

Есть ли в MATLAB простая команда, имитирующая возможность string.join добавить символ разделителя?

Я знаю, что это можно сделать с помощью гротескных конструкций, таких как

[sprintf('%s_',L{1:end-1}), L{end}]

среди других, но есть ли более простой способ?

Ответы [ 3 ]

5 голосов
/ 16 декабря 2011

Не думаю, что в MATLAB есть встроенная функция, такая как string.join. Ваше утверждение в sprintf, вероятно, является наилучшим способом сделать это.

Вот еще одна более поздняя версия FileExchange - STRJOIN . Вероятно, это было основано на JOIN из ответа @ BenH.

2 голосов
/ 29 января 2013

Редактировать: Начиная с Matlab 2013a, есть встроенная функция под названием strjoin

Я не знаю ни одного встроенного способа, но сейчас я использую этом при условии, что вы хотите объединить «строку ячеек» и не хотите терять завершающие пробелы):

L = {' A',' B ','C '};
delimiter = '/';
append_delimiter = @(in) [in delimiter];
tmp = cellfun(append_delimiter, L(1:end-1), 'UniformOutput', false);
result = horzcat(tmp{:}, L{end})

>>> ans =

A B C 

или аналогично функции:

function joined_str = strjoin(in_strings, delimiter)
    assert(iscellstr(in_strings), 'strjoin:cellstr', '1st argument: cell string');
    assert(ischar(delimiter) && (isvector(delimiter) || isempty(delimiter)), ...
           'strjoin:string', '2nd argument: string');

    append_delimiter = @(in) [in delimiter];
    appended = cellfun(append_delimiter, in_strings(1:end-1), 'UniformOutput', false);
    joined_str = horzcat(appended{:}, in_strings{end});
end

>> strjoin({' A ', ' B ', ' C '}, '_')

ans =

 A _ B _ C 
0 голосов
/ 16 декабря 2011

Вас может заинтересовать [объединение], найденное при обмене файлами (http://www.mathworks.com/matlabcentral/fileexchange/4872).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...