我想做类似以下的事情,除了我只想删除'g'和'g',因为它们是一个接一个发生的重复。我也想保持序列相同。
任何帮助将不胜感激!!!
我在MATLAB中有这个单元格数组:
y = { 'd' 'f' 'a' 'g' 'g' 'w' 'a' 'h'}
ans =
'd' 'f' 'a' 'w' 'a' 'h'
答案 0 :(得分:3)
在多个副本上使用时,我的第一个答案(下面)出错了(感谢grantnz)。这是一个更新版本:
>> y = { 'd' 'f' 'a' 'g' 'g' 'w' 'a' 'h' 'h' 'i' 'i' 'j'}; >> i = find(diff(char(y)) == 0); >> y([i; i+1]) = [] y = 'd' 'f' 'a' 'w' 'a' 'j'
OLD ANSWER
如果您的“单元格向量”始终只包含单个字符元素,则可以执行以下操作:
>> y = { 'd' 'f' 'a' 'g' 'g' 'w' 'a' 'h'} y = 'd' 'f' 'a' 'g' 'g' 'w' 'a' 'h' >> y(find(diff(char(y)) == 0) + [0 1]) = [] y = 'd' 'f' 'a' 'w' 'a' 'h'
答案 1 :(得分:1)
这样看:你想要保留一个元素,当且仅当(1)它是第一个元素或(2)它的前任与和不同时(3)它是最后一个元素或(4)它的继承者与它不同。所以:
y([true ~strcmp(y(1:(end-1)),y(2:end))] & [~strcmp(y(1:(end-1)),y(2:end)) true])
或者,或许更好,
different = ~strcmp(y(1:(end-1)),y(2:end));
result = y([true different] & [different true]);
答案 2 :(得分:0)
这应该有效:
y([ diff([y{:}]) ~= 0 true])
或稍微紧凑
y(diff([y{:}]) == 0) = []
更正:以上不会同时删除重复项
ind = diff([y{:}]) == 0;
y([ind 0] | [0 ind]) = []
顺便说一句,即使有多个重复序列,这也有效
例如,
y = { 'd' 'f' 'a' 'g' 'g' 'w' 'a' 'h' 'h'};
ind = diff([y{:}]) == 0;
y([ind 0] | [0 ind]) = []
y =
'd' 'f' 'a' 'w' 'a'