Why does 'diffuse_color' expect four values and not three with Python in 2.8?
You saw the wrong version of document, 2.80 change a lot. Ones should always use new document page for 2.80 version:
Material(ID) - Blender 2.80 API (latest)

diffuse_color
Diffuse color of the material
Type:
float array of 4 items in [0, inf], default (0.8, 0.8, 0.8, 0.8)
last update: 2020-08-04 Blender 2.91 Alpha

The four values are represented as: [Red, Green, Blue, Alpha] by default rendering pipeline. These values may stay from 0.0 to 1.0 if the color is interpreted as diffuse. Other wise, it doesn't need to less than 1. eg. a light color node might contain a value more than 1 unit.