The reason it doesn't work is because it Sethas an attribute HoldFirst. This means that Set[a,stuff]passes the character ainstead of the value ain Set. As for this attribute, ask yourself: when you do Set[a,stuff], do you want to assign to a stuffsymbol aor value a?
a , , a HoldFirst . a , 5, a=stuff stuff a, 5
Hold :
Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}