MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Transforming/expanding a list

  • To: mathgroup at
  • Subject: [mg127997] Re: Transforming/expanding a list
  • From: Andrzej Kozlowski <akozlowski at>
  • Date: Sat, 8 Sep 2012 03:06:48 -0400 (EDT)
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • References: <>

On 6 Sep 2012, at 10:14, Mark Coleman <markspcoleman at> wrote:

> I'm working on some Mathematica code that will help transform a large set of lists drawn from my company's legacy database systems. A typical row of the raw data looks like
> The lists are sequences of real numbers, separating some some number of Strings which for convenicence sake we call "NULL" (as opposed to a proper Mathematica Null). The goal is to create a new list where each NULL is replaced by the real number that most recently proceeds it (note that any number of NULLs may occur before or after any real values). I would like the code to return
> {x1,x1,x1,x2,x2,x2,x2,x2,x3,x3,x3,x4,x5,x5}
> Thanks
> Mark

How about something like this:

h[ls_] :=
 Module[{u, g}, g[l_] /; VectorQ[l, NumberQ] := (u = Last[l];);
  g[l_] /; Last[l] == NULL := l /. NULL -> u;
  DeleteCases[Flatten[Map[g, Split[ls]]], Null]]

for example:

ls = {1, NULL, NULL, 2, NULL, NULL, NULL, NULL, 3, NULL, NULL, 4, 5,



The way the code is written, it is essential that your x's are numbers, although one could easily change it to make it work with symbols.

Andrzej Kozlowski

  • Prev by Date: Using code from nb. file in NetLink
  • Next by Date: Re: Mathematica Prove[...] Command Possible?
  • Previous by thread: Re: Transforming/expanding a list
  • Next by thread: Re: Transforming/expanding a list