withParam takes a JSON array of items, and because it reads a parameter that array can be produced while the workflow runs. An inline YAML list is withItems, which is fixed at authoring time. Argo does no comma splitting — a string that is not valid JSON simply fails to expand. And repeating one value a set number of times is closer to withSequence, which counts rather than iterating data.
Official docs