Re: Finding position of an element in a list:
- To: mathgroup at smc.vnet.net
- Subject: [mg84015] Re: Finding position of an element in a list:
- From: Albert Retey <awnl at arcor.net>
- Date: Thu, 6 Dec 2007 07:25:32 -0500 (EST)
- References: <fj89m3$a90$1@smc.vnet.net>
Hi, > (This is an easy problem, but I was unable to get it work in Mathematica, > probably because of the precision - I tried setting precision too, still got stuck) this has presumably absolutely nothing to do with precision... > Suppose we have a list, xlis, having some elements, and I have to find one > nearest value I am interested in that list. In the below example, I > wanted to find the position of a number belonging to list and close to 6 > (which is 5.5 located at 7th). > I can do this: > > xlis = {0, 1, 3, 10, 4, 5, 5.5, 10.25}; > dropOuterBraces[lst_List] := > StringTake[#1, {2, StringLength[#1] - 1}] &[ > ToString[lst]]; (* took from previous help posted by Peter Pein *) I don't think that this function is a good choice for the problem at hand: conversion of expressions to string to manipulate them is rarely a good idea and I think Peter's function served a very different purpose... > n1 = Nearest[xlis, 6] > eval = dropOuterBraces[n1] If you use InputForm[eval] or FullForm[eval] you will find that dropOuterBraces returns a string, not a number, so it is the expected behavior that no occurance of the string "5.5" is found within the list containing the number 5.5. One solution could be to revert eval to a number with ToExpression[eval], but why not just use: n1=First[Nearest[xlis,6]] Position[xlis,n1] which extracts the first element of the list which Nearest returns and works perfectly for me. Note that Nearest returns always a list, presumably since 1. it is possible to have more than one nearest member, like in: Nearest[{1,3},2] 2. it is possible to ask Nearest for the n nearest, like in: Nearest[{1,2,3,4,5,6,7,8,9},5,4] In your case, only the first of these cases could make Nearest return a list longer than one. In this case additional information is needed to decide which one you want n1 to be set to. Also note that dropOuterBraces would return a string "1,3" for case 1, which doesn't make sense even if converted back with ToExpression. Conclusion: don't use ToString when not necessary... hth, albert