2011-12-16 12 views
9

, kolayca karakter kümesi ile ayrılmış dizeleri listesi içeriğini, katılabilir, bu yolu MATLAB eşdeğeri:Python'un string.join() Python

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

MATLAB, ben arada kullanabilirsiniz dizeleri bir hücre dizisi bu şekilde:

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

ans = 

ABC 

bir ayırıcı karakter eklemek için string.join yeteneğini taklit MATLAB'ta basit bir komut var mı?

Bunun hiç

diğerleri arasında
[sprintf('%s_',L{1:end-1}), L{end}] 

olarak grotesk yapılara yoluyla yapılabilir farkındayım ama daha basit bir yolu var mı?

+6

+1. Benim için yeterince iyi! –

+1

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

cevap

4

MATLAB'de string.join gibi bir yerleşik işlev olduğunu sanmıyorum. Sprintf ile yaptığınız açıklama muhtemelen nasıl yapılabileceğinin en iyi yoludur.

Başka bir daha yeni DosyaExchange gönderisi - STRJOIN. Muhtemelen JOH'dan @ BenH'nin cevabına dayanıyordu.

+0

Teşekkürler. Tek bir komut değil, ama strjoin çok yönlü görünüyor. – foglerit

0

Dosya değiş tokuşunda bulunan [join] ile ilgilenebilirsiniz (http://www.mathworks.com/matlabcentral/fileexchange/4872).

+0

teşekkürler. Bu gönderimin varlığı muhtemelen bana sorumun cevabının "hayır" olduğunu söylüyor. – foglerit

2

Düzenleme: orada strjoin

herhangi yerleşik yol bilmiyorum denilen yerleşik bir işlevdir, ama şimdi bunu kullanabilir üzerinde Matlab 2013a itibaren (Sana bitiştirmek istiyorum varsayarak yaşıyorum bir 'hücre dizisi' ve sonunda boşluk kaybetmek istemiyorum):

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 

Veya, bir fonksiyon olarak aynı: "grotesk yapı" için

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

Bu 'grotesk' ne 'şirin' olarak 'grotesk' için. –