Beaucoup de mes boucles ressemblent à ceci:
items = [3,14,15,92];
for item_i = 1:numel(items)
item = items(item_i);
% ...
end
4 Réponses :
Cela fonctionnera-t-il pour vous? J'espère que cela aide. P> P>
Je dois référencer l'index des éléments au sein de la boucle, par exemple. afin de stocker des calculs sur la bonne position dans une matrice.
J'ai édité la réponse maintenant. Devrait fonctionner, mais je préférerais probablement utiliser votre solution d'origine.
Je crois qu'il n'y a aucun moyen de le faire. Une astuce que j'ai utilisée dans le passé est d'exploiter le fait que Matlab boucle sur les colonnes em> d'une matrice, de sorte que vous pouvez définir une fonction puis utilisez-le comme suit: p> Mais ce n'est pas vraiment meilleur que ce que tu étais faire à l'origine. Ce serait bien si ã la python vous pouviez alors quelque chose comme p> où énumérer code> qui ajoute une ligne d'index au sommet d'une matrice: énumérer code> est une fonction qui renvoie deux matrices de la même longueur, mais ... vous ne pouvez pas. p> p>
+1: C'est ce que j'utilise aussi de temps en temps, sauf que ma syntaxe est pour k = [articles; 1: longueur (éléments)] code> si éléments code> est une matrice ou pour k = [éléments; Num2Cell (1: longueur (éléments))] code> pour la contrepartie de la matrice de cellule.
Je ferai de temps en temps quelque chose comme ça mais cela n'est utile que dans des situations très spécifiques (spécifiquement, ces mêmes situations que vous utiliseriez arrayfun code> pour raccourcir Syntaxe), et pour être honnête, la façon dont vous le faisiez au départ est probablement mieux pour la plupart des cas - toute autre chose va probablement obscurcer votre intention. p> p>
Dans votre exemple, vous pouvez éviter arrayfun code> en faisant arr = [arr; num2cell (1: longueur (arr))]; sprintf ('% s (article% d) \ n', arr {:}) code> :)
@Ittant: Nice! Je ne savais pas sur num2cell code>. Bien que ce code renvoie un tableau char code> et non une cellule code>.
Vous avez raison. Ensuite, utilisez Textscan (Sprintf ('% S (Item% d) \ n', arr {:}), '% S', 'Délimiter', '') code> Pour scinder le résultat dans les cellules: )
Semblable à la réponse de Chris Taylor, vous pouvez le faire:
function [ output ] = Enumerate( items )
output = struct('Index',num2cell(1:length(items)),'Value',num2cell(items));
end
items = [3,14,15,92];
for item = Enumerate(items)
item.Index
item.Value
end
Indépendamment de cela, il est faux de faire du double travail. Je pense toujours que cette solution est la plus facile / naturelle à lire.
Je trouve la réponse acceptée plus courte et plus lisible.