2011-12-16 13 views
9

En Python, que pueden unirse fácilmente el contenido de una lista de cadenas, separadas por un conjunto de caracteres, de esta manera:MATLAB equivalente a string.join de Python()

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

En MATLAB, puedo concatenar una serie de células de cuerdas de esta manera:

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

ans = 

ABC 

¿existe simple comando en MATLAB que imita la capacidad de string.join añadir un carácter de separación?

Soy consciente de que esto puede hacerse a través de construcciones grotescas como

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

entre otros, pero ¿hay una manera más sencilla?

+6

+1 para la "construcción grotesca". ¡Suficientemente bueno para mi! –

+1

Matlab 2016 tiene 'join ({'A', 'B', 'C', 'D'}, ',')' – Eric

Respuesta

4

No creo que haya una función de compilación como string.join en MATLAB. Su declaración con sprintf es probablemente la mejor manera de cómo se puede hacer.

Aquí hay otra presentación más reciente de FileExchange: STRJOIN. Probablemente se basó en JOIN de la respuesta de @ BenH.

+0

Gracias. No es un solo comando, pero strjoin parece muy versátil. – foglerit

0

Puede que esté interesado en [join] que se encuentra en el intercambio de archivos (http://www.mathworks.com/matlabcentral/fileexchange/4872).

+0

Gracias. La existencia de esa presentación probablemente me dice que la respuesta a mi pregunta es "no". – foglerit

2

Editar: De Matlab 2013a allí es una función incorporada llamados strjoin

no sé de ninguna manera integrada, pero yo uso esto ahora (estoy suponiendo que desea concatenar una 'cadena de células' y que no quiere perder espacios finales):

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 

O, lo mismo que una función:

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 
+1

Esto es 'grotesco' como lo que 'grotesco' es 'lindo'. –