Matlab相当于Python的枚举

时间:2014-08-24 06:40:17

标签: python matlab

在Python中,我们有一个方便的函数enumerate

for i,item in enumerate(foo_list):
    do something

Matlab是否等同于enumerate

目前,我能想到的是以下内容(Matlab代码):

i=1;
for foo=foo_list
    ....
    i=i+1;
end

3 个答案:

答案 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