Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a list of lists. For example,

 list = {{0,1,0,1,true},{0,0,0,0,false},{0,1,1,1,true},{1,1,1,1,false},{2,2,2,2,false}}

I'd like to find all lists that have the fifth element set to true. I'm looking for a general method that works for any lists in this format. How can I do this?

In the above example, the result that I'm looking for would be:

 {{0,1,0,1,true},{0,1,1,1,true}}

Sorry for such a basic question. I looked through the documentation for lists, and couldn't find a way to do this. I'm still fairly new at Mathematica.

share|improve this question
2  
Have you tried Cases or Select? true is a proper symbol, but be aware that Mathematica represents truth values with True and False (not true) –  Szabolcs Mar 25 at 15:34
1  
Cases[{{0, 1, 0, 1, true}, {0, 0, 0, 0, false}, {0, 1, 1, 1, true}, {1, 1, 1, 1, false}, {2, 2, 2, 2, false}}, {___, true, ___}], see also DeleteCases e.g. in this answer –  Artes Mar 25 at 15:41

2 Answers 2

up vote 5 down vote accepted

There are several options and this is probably a duplicate although I can't seem to find it. A few of them to try out and learn:

list = {{0, 1, 0, 1, true}, {0, 0, 0, 0, false}, {0, 1, 1, 1, true}, 
        {1, 1, 1, 1, false}, {2, 2, 2, 2, false}};

Cases[list, {__, true}]
Select[list, Last@# === true &]
DeleteCases[list, {__, false}]
Pick[list, list, {__, true}] /. {} -> Sequence[]

all of which return

(* {{0, 1, 0, 1, true}, {0, 1, 1, 1, true}} *)

If your data has True and False instead of true and false, then you can simplify the Select example to:

Select[list, Last]
share|improve this answer
1  
Scan[ If[#[[-1]] === true, Sow[#]] &, list] // Reap –  Kuba Mar 25 at 16:21
1  
Extract[list, Position[list, true][[;; , {1}]]] –  Kuba Mar 25 at 16:21

as @Szabolcs pointed out, MMA is case sensitive and true is treated as a symbol and not as a variable, thus.

data = {{0, 1, 0, 1, true}, {0, 0, 0, 0, false}, {0, 1, 1, 1, 
true}, {1, 1, 1, 1, false}, {2, 2, 2, 2, false}};
Select[data, MatchQ[#[[5]], true] &]
(*{{0, 1, 0, 1, true}, {0, 1, 1, 1, true}}*)

If the data is entered accordingly (with True and False) then

data = {{0, 1, 0, 1, True}, {0, 0, 0, 0, False}, {0, 1, 1, 1, 
   True}, {1, 1, 1, 1, False}, {2, 2, 2, 2, False}};    
Select[data, TrueQ[#[[5]]] &]
(*{{0, 1, 0, 1, True}, {0, 1, 1, 1, True}}*)
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.