Re: Position function
- To: mathgroup at smc.vnet.net
- Subject: [mg55594] Re: Position function
- From: D Herring <dherring at at.uiuc.dot.edu>
- Date: Wed, 30 Mar 2005 04:28:55 -0500 (EST)
- References: <d2b4q9$77c$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
konstantpi at mail15.com wrote: > suppose i have a List: > a={{1,3,1,2,1},{5,6,1,1,3,1}} > how i could know the positions of "1" in every sublist , i could use Position[a > [[1]],1] and Position[a[[2]],1] > but i want a one formula to give me {{1,3,5},{3,4,6}} The Map function is quite handy when doing the same thing to a list of entries. Using unnamed functions inside Map is confusing at first, but its highly more compact and less prone to errors for simple cases. Here, we want each sublist to be processed individually. My initial guess was Map[Position[#,1]&,a] Unfortunately, this gave {{{1}, {3}, {5}}, {{3}, {4}, {6}}} Here, the undesired depth can easily be fixed with Flatten, so Map[Flatten[Position[#, 1]]&, a] yields the desired result. An equivalent notation is (Flatten[Position[#1, 1]] & ) /@ a This second notation is obtained by converting the cell to InputForm. > the second question: > using Position[a,1] will give: > {{1, 1}, {1, 3}, {1, 5}, {2, 3}, {2, 4}, {2, 6}} > in general how to extract only the second item from every sublist so the output > will be; > {1,3,5,3,4,6} Similar story here. Use Map with an unnamed function to only keep the second Part of each sublist. Map[Part[#, 2]&, Position[a, 1]] or (#1[[2]] & ) /@ Position[a, 1] Later, Daniel