2011-12-16 23 views
9

が、私は簡単に文字のセットで区切られた文字列のリストの内容を、参加することができ、このようにMATLABと同等:Pythonのstring.join()は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 

は、区切り文字を追加するstring.joinの能力を模倣MATLABでの簡単なコマンドはありますか?

私は、これは、とりわけ

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

としてグロテスクな構造を介して行うことができることを認識してんだけど、簡単な方法はありますか?

+6

+1。私のために十分に良い! –

+1

Matlab 2016には 'join({'A'、 'B'、 'C​​'、 'D'} '、')' – Eric

答えて

4

MATLABにstring.joinのようなビルドイン関数はないと思います。 sprintfでのあなたの声明はおそらく、それがどのように実行される最良の方法でしょう。

さらに最近のFileExchangeの提出 - STRJOINがあります。おそらく、@ BenHの答えからのJOINに基づいていました。

+0

ありがとうございます。それは単一のコマンドではありませんが、strjoinは非常に汎用性があります。 – foglerit

0

ファイル交換(http://www.mathworks.com/matlabcentral/fileexchange/4872)にある[参加]に興味があるかもしれません。

+0

があります。その投稿の存在は、おそらく私の質問に対する答えは「いいえ」と言います。 – foglerit

2

編集: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 
+1

これは 'グロテスク'とは 'グロテスク'とは 'かわいい'です。 –