Python合并函数翻译成Matlab不工作
对于以下运行良好的Python代码Python合并函数翻译成Matlab不工作,python,matlab,merge,Python,Matlab,Merge,对于以下运行良好的Python代码 #-------------------------------------------------- s = [[1,2,3],[3,6],[9,0],[0,8]] s = [set(i) for i in s if i] t = [] while len(t) != len(s): t = s s = [] for i in range(len(t)): for j in range(len(s)):
#--------------------------------------------------
s = [[1,2,3],[3,6],[9,0],[0,8]]
s = [set(i) for i in s if i]
t = []
while len(t) != len(s):
t = s
s = []
for i in range(len(t)):
for j in range(len(s)):
if not s[j].isdisjoint(t[i]):
s[j] = s[j].union(t[i])
break
else: s.append(t[i])
print(s)
#--------------------------------------------------
>>> [{1, 2, 3, 6}, {0, 9, 8}]
#--------------------------------------------------
我对Matlab的翻译如下:
%--------------------------------------------------
s = {[1,2,3],[3,6],[9,0],[0,8]};
t = {};
while length(t) ~= length(s)
t = s;
s = {};
for i=1:length(t)
for j=1:length(s)
if ~isempty(intersect(s{j},t{i}))
s{j} = union(s{j},t{i});
break
else
s = [s; t{i}];
end
end
if isempty(s); s = [s; t{i}]; end
end
end
s{:}
%--------------------------------------------------
ans =
1 2 3 6
ans =
0 8 9
ans =
0 8
%--------------------------------------------------
工作不正确
问:这是什么原因?
参考文献:
Python代码之后嗯,我可以找到如下解决方案
%--------------------------------------------------
s = {[1,2,3],[3,6],[9,0],[0,8]};
t = {};
while length(t) ~= length(s)
t = s;
s = {};
for i=1:length(t)
for j=1:length(s)
if ~isempty(intersect(s{j},t{i}))
s{j} = union(s{j},t{i});
j = 0;
break;
end
end
if isempty(s) || (j == length(s));
s = [s; t{i}];
end
end
end
s{:}
%--------------------------------------------------
ans =
1 2 3 6
ans =
0 8 9
其中j=0代码>和如果是空的(j==长度(s))代码>满足else:
与Python版本相同