Karim Belabas on Sun, 16 Jun 2013 23:35:48 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Enumerating and eliminating |
* zak seidov [2013-06-16 18:49]: > Charles, > thanks for listput! > I also found listpop - to remove element by index. > And how eliminate element by his value? The best is to use lists to incrementally build a vector, then convert it to a set. Then, you can eliminate by value: setminus(v, [6]). ? v=List(); for(k=1,10,x=k+3;if(x<10,listput(v, x))); v = Set(v) %1 = [4, 5, 6, 7, 8, 9] ? setminus(v, [3,5,9]) %2 = [4, 6, 7, 8] Both arguments to setminus must be sets (i.e. sorted), use setminus(Set(A), Set(B)) in case of doubt. Cheers, K.B. P.S. Using only sets as in v=[]; for(k=1,10,x=k+3;if(x<10, v = setunion(v,[x]))); is inefficient since the complexity is quadratic in the final set size. In pari-2.6.0, you can use directly the "set notation": ? v = [x | x<-vector(10, k, k+3), x < 10] %1 = [4, 5, 6, 7, 8, 9] (See ??select and ??apply). Of course one can convert the resulting vector to a true set: v = Set(v) [ a no-op in this case ] -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~kbelabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `