在Python中,我们有一个方便的函数enumerate
:
for i,item in enumerate(foo_list):
do something
Matlab是否等同于enumerate
?
目前,我能想到的是以下内容(Matlab代码):
i=1;
for foo=foo_list
....
i=i+1;
end
答案 0 :(得分:5)
据我所知,Matlab中没有相当于枚举的内容。最常见的方法是:
for i = 1:length(foo_list)
item = foo_list(i);
% do stuff with i, item
end
答案 1 :(得分:1)
似乎在Matlab中没有等价物。但是,如果你有一个简单的1 x X阵列,你可以自己定义它(如果你不担心性能):
enumerate = @(values) [1:length(values); values]
a = [6 5 4]
for i=enumerate(a)
do something with i
end
当然,干净的方法是将它包装在一般工具箱中并添加一个断言a确实是1 x X向量。
答案 2 :(得分:1)
通过为迭代定义一个新类很容易实现:
classdef enumerate < handle
properties(Access = private)
IterationList;
end
methods
function self = enumerate(in)
self.IterationList = in;
end
function [varargout] = subsref(self, S)
item = subsref(self.IterationList,S);
num = S.subs{2};
out.item = item;
out.num = num;
varargout = {out};
end
function [m,n] = size(self)
[m,n] = size(self.IterationList);
end
end
end
您可以通过以下方式使用它:
for t = enumerate(linspace(0,1,10));
disp(['num is: ',num2str(t.num),'item is: ',num2str(t.item)]);
end
将获得以下输出:
num是:1item是:0
num是:2item是:0.11111
num是:3item是:0.22222
num是:4item是:0.33333
数字是:5项是:0.44444
数字是:6项是:0.55556
数字是:7项是:0.66667
num是:8item是:0.77778
数字是:9项是:0.88889
num是:10item是:1