5
$\begingroup$

I need to create a new list from a nested list but using the evaluation as criteria to drop the elements. For example let's say that that I have the following list:

list1={{1,1,-(-1)^3,x,2*x},{1,1,(-1)^3,x,2*x}, {1,1,x,2*x,3*x},{1,1,-x,-2*x,-3*x}} 

and I need to eliminate the elements of list1 that the absolute value of the third element give $1$, i.d. $-(-1)^3$ and $(-1)^3$, to obtain

 list2={{1,1,x,2*x,3*x},{1,1,-x,-2*x,-3*x}} 

In this case, list1 was created with the code

For[i = 1, i < 4, i++, For[j = 1, j < 4, j++, list1[i, j, p_] = Sort[Eigenvalues[mat[i, j, p]]]; ] ] 

I have been trying to use Select but until now I am not been able to create list2 to plot it with

list2=ParallelTable[Select[Abs[eigval[i, j, p][[3]]], Abs[#] != 1 &] , {i, 1, 4}, {j,1,4}] 

I am still learning to uses cases in Mathematica so I am not sure how to do it. Do you know if there is wise way to do it? Thanks in advance.

$\endgroup$

6 Answers 6

8
$\begingroup$

If you prefer using DeleteCases,

list2 = DeleteCases[list1, _?(Abs[#[[3]]] == 1 &)] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

$\endgroup$
6
$\begingroup$
Delete[ list1, Position[Abs[list1[[All, 3]]], 1] ] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

$\endgroup$
6
$\begingroup$

if you want to use Select, try this

Select[list1,!NumberQ@#[[3]]||Abs[#[[3]]]!=1&] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

$\endgroup$
2
$\begingroup$

This is pretty efficient on unpacked arrays (the Listable attribute assumes list1[[All, 3]] is a flat list, as it is in the OP's example):

Block[{signal}, SetAttributes[signal, Listable]; signal[1] = 1; signal[_] = 0; Pick[list1, signal@Abs[list1[[All, 3]]], 0] ] (* {{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}} *) 

(For packed arrays, one would probably want to use Unitize[x-1] instead of signal.)

$\endgroup$
1
$\begingroup$
list = {{1, 1, -(-1)^3, x, 2*x}, {1, 1, (-1)^3, x, 2*x}, {1, 1, x, 2*x, 3*x}, {1, 1, -x, -2*x, -3*x}}; 

Using SequenceSplit (new in 11.3}

First @ SequenceSplit[list, {{_, _, 1 | -1, __}}] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

$\endgroup$
1
$\begingroup$
l1 = {{1, 1, -(-1)^3, x, 2*x}, {1, 1, (-1)^3, x, 2*x}, {1, 1, x, 2*x, 3*x}, {1, 1, -x, -2*x, -3*x}}; 

Using Cases and Except with Condition:

Cases[l1, {_, _, Except[a_ /; Abs[a] == 1], __}, ∞] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

Or using SequenceCases:

SequenceCases[l1, {s : {_, _, Except[a_ /; Abs[a] == 1], __}} :> s] 

{{1, 1, x, 2 x, 3 x}, {1, 1, -x, -2 x, -3 x}}

$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.