Why Cases and Select treat the List differently?












3















Look at these two examples:



In[1]:=Select[f[i], MatchQ[_f]]
Out[1]:=f

In[2]:=Cases[f[i],_f]
Out[2]:={}


It seems that the Select take $f[i]$ as List, but Cases do not.



I also can not understand why the first gives that answer.



Thanks.










share|improve this question


















  • 1





    ref / Select / Generalizations&Extensions / #1.

    – Kuba
    2 days ago


















3















Look at these two examples:



In[1]:=Select[f[i], MatchQ[_f]]
Out[1]:=f

In[2]:=Cases[f[i],_f]
Out[2]:={}


It seems that the Select take $f[i]$ as List, but Cases do not.



I also can not understand why the first gives that answer.



Thanks.










share|improve this question


















  • 1





    ref / Select / Generalizations&Extensions / #1.

    – Kuba
    2 days ago
















3












3








3


1






Look at these two examples:



In[1]:=Select[f[i], MatchQ[_f]]
Out[1]:=f

In[2]:=Cases[f[i],_f]
Out[2]:={}


It seems that the Select take $f[i]$ as List, but Cases do not.



I also can not understand why the first gives that answer.



Thanks.










share|improve this question














Look at these two examples:



In[1]:=Select[f[i], MatchQ[_f]]
Out[1]:=f

In[2]:=Cases[f[i],_f]
Out[2]:={}


It seems that the Select take $f[i]$ as List, but Cases do not.



I also can not understand why the first gives that answer.



Thanks.







pattern-matching filtering






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 2 days ago









XiaoaiXXiaoaiX

1105




1105








  • 1





    ref / Select / Generalizations&Extensions / #1.

    – Kuba
    2 days ago
















  • 1





    ref / Select / Generalizations&Extensions / #1.

    – Kuba
    2 days ago










1




1





ref / Select / Generalizations&Extensions / #1.

– Kuba
2 days ago







ref / Select / Generalizations&Extensions / #1.

– Kuba
2 days ago












1 Answer
1






active

oldest

votes


















6















  1. Select preserves the head of the original expression, while Cases always returns the result in a List.


  2. Select operates only at level one, whereas Cases accepts a levelspec.



Specifically your first output is equivalent to these:



Part[f[i], {}]

Delete[f[i], 1]


The second can be made to match by expanding the levelspec to include level zero:



Cases[f[i], _f, {0, 1}]



{f[i]}



Recommended reading:




  • What best practices or performance considerations are there for choosing between Cases, Position, Pick and Select?

  • Head and everything except Head?

  • How to get Cases to wrap results in an arbitrary head?






share|improve this answer



















  • 2





    The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

    – Theo Tiger
    2 days ago











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f189270%2fwhy-cases-and-select-treat-the-list-differently%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









6















  1. Select preserves the head of the original expression, while Cases always returns the result in a List.


  2. Select operates only at level one, whereas Cases accepts a levelspec.



Specifically your first output is equivalent to these:



Part[f[i], {}]

Delete[f[i], 1]


The second can be made to match by expanding the levelspec to include level zero:



Cases[f[i], _f, {0, 1}]



{f[i]}



Recommended reading:




  • What best practices or performance considerations are there for choosing between Cases, Position, Pick and Select?

  • Head and everything except Head?

  • How to get Cases to wrap results in an arbitrary head?






share|improve this answer



















  • 2





    The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

    – Theo Tiger
    2 days ago
















6















  1. Select preserves the head of the original expression, while Cases always returns the result in a List.


  2. Select operates only at level one, whereas Cases accepts a levelspec.



Specifically your first output is equivalent to these:



Part[f[i], {}]

Delete[f[i], 1]


The second can be made to match by expanding the levelspec to include level zero:



Cases[f[i], _f, {0, 1}]



{f[i]}



Recommended reading:




  • What best practices or performance considerations are there for choosing between Cases, Position, Pick and Select?

  • Head and everything except Head?

  • How to get Cases to wrap results in an arbitrary head?






share|improve this answer



















  • 2





    The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

    – Theo Tiger
    2 days ago














6












6








6








  1. Select preserves the head of the original expression, while Cases always returns the result in a List.


  2. Select operates only at level one, whereas Cases accepts a levelspec.



Specifically your first output is equivalent to these:



Part[f[i], {}]

Delete[f[i], 1]


The second can be made to match by expanding the levelspec to include level zero:



Cases[f[i], _f, {0, 1}]



{f[i]}



Recommended reading:




  • What best practices or performance considerations are there for choosing between Cases, Position, Pick and Select?

  • Head and everything except Head?

  • How to get Cases to wrap results in an arbitrary head?






share|improve this answer














  1. Select preserves the head of the original expression, while Cases always returns the result in a List.


  2. Select operates only at level one, whereas Cases accepts a levelspec.



Specifically your first output is equivalent to these:



Part[f[i], {}]

Delete[f[i], 1]


The second can be made to match by expanding the levelspec to include level zero:



Cases[f[i], _f, {0, 1}]



{f[i]}



Recommended reading:




  • What best practices or performance considerations are there for choosing between Cases, Position, Pick and Select?

  • Head and everything except Head?

  • How to get Cases to wrap results in an arbitrary head?







share|improve this answer












share|improve this answer



share|improve this answer










answered 2 days ago









Mr.WizardMr.Wizard

230k294741040




230k294741040








  • 2





    The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

    – Theo Tiger
    2 days ago














  • 2





    The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

    – Theo Tiger
    2 days ago








2




2





The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

– Theo Tiger
2 days ago





The essence of (1) is that Select[f[i], MatchQ[_f]] matches nothing and only returns an empty expression with head f. It is the same as Select[f[i], MatchQ[_somethingelse]]. The recommended answers are very informative btw.

– Theo Tiger
2 days ago


















draft saved

draft discarded




















































Thanks for contributing an answer to Mathematica Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f189270%2fwhy-cases-and-select-treat-the-list-differently%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

If I really need a card on my start hand, how many mulligans make sense? [duplicate]

Alcedinidae

Can an atomic nucleus contain both particles and antiparticles? [duplicate]