10
votes

Comment supprimer le symbole NULL dans une table en mathématica?

J'ai besoin d'utiliser si à l'intérieur d'un table boucle, par exemple. Tableau [si [i <3, i], {i, 5}] donnera {1, 2, null, null, null}

mais je veux que le résultat soit {1,2} .

n'importe quelle solution pour cela?

EDIT:
Et si nous considérons table [si [i <3, f [i]], {i, 5}] qui donne {f [1], f [2], null, null , Null}


2 commentaires

5 Réponses :


14
votes

Si vous devez le supprimer d'une liste existante, vous pouvez utiliser

Reap@Do[If[i < 3, Sow[i]], {i, 5}]
list = %[[2, 1]]


1 commentaires

+1. J'ai réellement mis en place votre dernière suggestion avec Reap-Sow en pleine généralité dans la réponse que j'ai liée à, dans ma réponse (juste peut-être la syntaxe de la condition pourrait être plus conviviale).



6
votes

Autre alternative, vous pouvez utiliser la variation de la table de Cette réponse , conçue spécifiquement pour le bâtiment de la table conditionnelle. Voici comment il apparaît: xxx

Le dernier argument est une fonction représentant la condition. En fait, il serait bien de disposer de syntaxe où l'on pourrait utiliser directement une syntaxe i


6 commentaires

Veuillez envisager d'illustrer pourquoi cela peut être préféré à la réponse simpliste que j'ai donnée ci-dessous.


@Monsieur. Assistant pour une raison très simple: il s'agit d'une fonction générale (ma version). Il gère également un étui multidimensionnel, avec une syntaxe uniforme. Il est toujours plus facile de lire et serait encore plus facile lorsque j'ajoute la syntaxe pour remplacer la fonction par une expression pour une condition. Devrait-il s'agir d'une fonction intégrée, ou tout simplement un wri-approuvé-être approuvé, il n'y aurait aucune question sur l'utilisation de rien d'autre. Imaginez que vous n'ayez pas dit cas et que quelqu'un vous en donne un (mis en œuvre sur le niveau supérieur). Ne l'utiliseriez-vous pas (si la mise en œuvre est OK)? Beaucoup de choses se situent à peu près des habitudes, des conventions, etc.


Peut-être que vous devriez inclure cela dans votre réponse? ;-)


@ M.Wizard ne le pense pas :). Il y a suffisamment d'informations pour que ceux qui en ont besoin le trouveront.


À moins que vous ne soyez obstiné et supprimez votre commentaire précédent, c'est au moins sur cette page. +1


@ M.Wizard je garderai le commentaire :). Merci pour la uppote.



3
votes

Si vous utilisez la séquence [] au lieu de NULL, vous pouvez faire

Table[If[i < 3, i, Sequence[]], {i, 5}]


2 commentaires

Rolf, s'il vous plaît voir la réponse que je viens d'ajouter. J'ai presque édité votre question au lieu de la publier, mais j'ai réalisé que je remplacerais essentiellement votre réponse avec la mienne, alors je ne l'ai pas fait.


M. Wizard: Très sympa! Je ne savais pas que ## & @ [] être une séquence [] équivalente.



29
votes

concise: xxx pré>

ceci fonctionne car la fonction ## & code> n'évalue pas immédiatement. p>

## & est une fonction "disparition". p> xxx pré>

----> {1, 2, 3, 4}


3 commentaires

@Leonid merci d'avoir montré ou de me rappeler cela il y a quelques mois.


Je pense que c'était votre invention. J'utilise normalement la séquence @@ {} , ce qui n'est pas aussi élégant (et peut aussi être un peu plus lent plus lent).


@Leonid; Je crois que c'est correct, mais j'avais utilisé Séquence @ inégalée [] Intérieur si avant cela. (PS Savez-vous de rechercher des commentaires, à part Google? J'aimerais trouver cet échange.)



2
votes

Dans la réponse précédente, la pièce ## & [] peut être remplacée par le symbole intégré rien xxx

donne xxx


0 commentaires