What about something like this?
Set variables
Colors = red, white, blue
MaxColors = count(Colors) [or 3 if that function doesn’t work)
LightCount = 4
Counter (integer) = 1
ColorChoice (integer) = 0
every x seconds/minutes, whatever you want the change frequency to be
for loop (Counter variable 1 to LightCount)
Set light1 = arrayItem(ColorChoice,Colors)
If ColorChoice = Max Colors, then set ColorChoice = 0; else ColorChoice+1
Set light2 = arrayItem(ColorChoice,Colors)
If ColorChoice = Max Colors, then set ColorChoice = 0; else ColorChoice+1
Set light3 = arrayItem(ColorChoice,Colors)
If ColorChoice = Max Colors, then set ColorChoice = 0; else ColorChoice+1
Set light4 = arrayItem(ColorChoice,Colors)
If ColorChoice = Max Colors, then set ColorChoice = 0; else ColorChoice+1
Wait x seconds or minutes (set relative to the time you have your piston execute. For example, if this piston runs every 1 minute, the wait time here should be 15 seconds so it completes all 4 rotations before the piston is called again… the loop will run at 0 seconds, 15, 30, and a final one at 45. Then the piston is called again at 60 seconds, keeping the intervals even)
Counter = Counter +1
I don’t have color lights to try it out, but I think the logic is roughly there - might take some tweaking to get it the way you want.