Since you do not let us know your "inelegant" code I can't be sure that
you will consider mine more elegant.
However, here it is:
In[1]:=
EmbeddedZeros[l_List]:=
Module[{u=N[l]},
ReplaceList[
u,{___,x_,v:Repeated[0.0],y_,___}:>
RuleCondition[{x,v,y},xâ? 0&&yâ? 0]]]
In[2]:=
a={0.75,0.,0,0.42,0.10,0.0,0.03};
In[3]:=
b={0.0,0.90,0.75,0.42,0.25,0.0};
In[4]:=
EmbeddedZeros[a]
Out[4]=
{{0.75,0.,0.,0.42},{0.1,0.,0.03}}
In[5]:=
EmbeddedZeros[b]
Out[5]=
{}
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
On Saturday, December 29, 2001, at 02:46 PM, Coleman, Mark wrote:
> Greetings,
>
> Can anyone suggest an efficient/elegant way of checking a list for
> 'embedded' zeros. By embedded I mean the occurence of one or more zeros
> between two non-zero elements (note: zeros at the ends of the list are
> not relevant). For instance, the following lists all contain embedded
> zeros:
>
> a={0.98,0.87,0.0,0.5,0.25}
> b={0.9,0.0,0.0,0.0,0.0,0.0,0.05}
> c={0.75,0.42,0.10,0.0,0.03}
>
> while this list does not d={0.0,0.90,0.75,0.42,0.25,0.0}
>
> By way of background, I am working on a problem involving estimating
> generators for Markov transition matrices. One condition that ensures
> that a generator *does not* exist is the presence of inaccessible states
> in any row of the matrix. Thus one need only find a single occurance of
> an inaccessible state to show that a generator does not exist. Hence the
> code need only locate one such state, not all of them.
>
> The Mathematica code I've written for this problem does work, but it is
> hardly
> "elegant".
>
> Any help would be much appreciated!
>
> Best regards,
>
> -Mark
>
>
>
>