A combination of [`IntegerPartitions`](https://reference.wolfram.com/language/ref/IntegerPartitions.html), [`RandomChoice`](https://reference.wolfram.com/language/ref/RandomChoice.html)and [`RandomSample`](https://reference.wolfram.com/language/ref/RandomSample.html): n = 30; RandomSample @ RandomChoice @ IntegerPartitions[0, {n}, {-1, 0, 1}] >{-1, 1, 1, 1, 1, -1, -1, 0, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 0, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1} Total @ % > 0 You can also do RandomSample @ PadRight[Flatten @ ConstantArray[{1, -1}, RandomChoice[Range[0, Floor[n/2]]]], n] > {-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, -1, -1, -1, 0, 0, -1, 0, 0, 0, 0, 1, 0} Total @ % > 0 For large `n`, the second approach is much faster than the first.