Mathematica Using an If loop in Mathematica

  • Thread starter Thread starter Physicslad78
  • Start date Start date
  • Tags Tags
    Loop Mathematica
AI Thread Summary
The discussion focuses on eliminating pairs from a list based on a condition in Mathematica. The user seeks to filter out pairs where the second element exceeds 1. A suggested approach utilizes a loop with an If statement to append qualifying pairs to a new list. An alternative, more efficient method employs the built-in function DeleteCases, which directly removes pairs matching the condition. Additionally, the conversation shifts to a related programming task involving printing values based on whether a number is even or odd, with examples provided using both a For loop and pattern matching techniques. The latter method demonstrates a concise way to apply transformations to a range of numbers based on their parity.
Physicslad78
Messages
46
Reaction score
0
Dear all,

I have a list of pairs say Li={{a,x},{b,y},{c,z}...}. I want to eliminate from this list all pairs that have their second part i.e the x, y, z...>1 and I was thing of using an If loop. Can anyone tell me how please...



Thanks...
 
Physics news on Phys.org
There is probably a more elegant way of doing it (it wouldn't surprise me if Mathematica has some built in function for this), but this should get you started:

Code:
L2 = {};
Do[
    If[Li[[i, 2]] <= 1, AppendTo[L2, Li[[i]]]]
    ,{i, Length[Li]}]
L1 = L2;
 
Last edited:
question : For each number k from 1 to 10, print half the number if k is even and twice the number if k is odd.
<I think this question involving loop but i ddnt how to solve it. anyone ?>
 
(*One built in function to eliminate pairs matching a condition using pattern matching*)

In[1]:= v={{1,7},{2,-5},{3,0},{4,9}};DeleteCases[v,{x_,y_/;y>1}]
Out[2]= {{2,-5},{3,0}}

(*one method of printing using a For*)

In[3]:= For[k=1,k≤10,k++,
If[EvenQ[k],Print[k/2],Print[2k]]
]

From In[3]:= 2
From In[3]:= 1
From In[3]:= 6
From In[3]:= 2
From In[3]:= 10
From In[3]:= 3
From In[3]:= 14
From In[3]:= 4
From In[3]:= 18
From In[3]:= 5

(*another method using pattern matching*)

In[4]:= k=.; (*clear that value assigned to k*)
Range[10]/.{k_/;EvenQ[k]->k/2,k_/;OddQ[k]->2k}

Out[5]= {2,1,6,2,10,3,14,4,18,5}
 

Similar threads

Back
Top