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 very long nested list. Here is a short example:

list = {{1.2, {1, 1, 1, 1}, {2, 2, 2}}, {0.9, {3, 3, 3, 3}, {4, 4, 4}}, {1.4, {4, 4, 4, 4}, {5, 5, 5}}}

Now I want to cancel all entries if the first entry of each part of the list (list[[i]]) is > 1. So that the new list would only consist of the second part of list (list[[2]])

newlist = {0.9, {3, 3, 3, 3}, {4, 4, 4}}

I have already tried my luck with Position and Delete, but with no success.

Thanks a lot for your help!

share|improve this question
    
Cases[list, {x_?NumericQ, a__} /; x <= 1 -> {x, a}] –  belisarius Dec 20 '13 at 16:09
    
It works great. Thanks a lot –  Anna Dec 20 '13 at 16:47
    
This is a very common type of question. (I may close it as a duplicate.) I agree with Pinguin Dirk's use of Pick, e.g. my own answers to (900) and (30155) –  Mr.Wizard Dec 20 '13 at 16:57
    
@belisarius That's too complicated; you need merely this: Cases[list, {x_, a__} /; x <= 1]. Also don't forget to use :> with named patterns! –  Mr.Wizard Dec 20 '13 at 17:21
    
I believe that the output you are looking for is a sublist of list, it should therefore be {{0.9, {3, 3, 3, 3}, {4, 4, 4}}} (note the extra {}) -- Unless you know that only one item will be selected. –  A.G. Dec 20 '13 at 18:42
add comment

2 Answers

up vote 2 down vote accepted

Rather than think of it as deleting certain unwanted parts of the list, you can equivalently think of it as selecting the parts you wish to keep. Accordingly, Select can be straightforwardly applied

Select[list, #[[1]] < 1 &]
{{0.9, {3, 3, 3, 3}, {4, 4, 4}}}

A. G. points out that this can be made more transparent by replacing the perhaps somewhat cryptic Part command [[1]] with

Select[list, First[#] < 1 &]

You can Flatten[%, 1] if you wish to get the levels exactly as described in the question.

share|improve this answer
    
Note that #[[1]] can also be written First[#] or First@# or even (# // First) !!! –  A.G. Dec 20 '13 at 18:14
add comment

A solution using Pick:

Pick[list, UnitStep[list[[All, 1]] - 1], 0]

(I subtract one from the first element and then grab all positions with a negative such element)

share|improve this answer
    
Great idea. Thanks a lot –  Anna Dec 20 '13 at 16:49
add comment

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.