Identify and delete all unrequired fields from Shapefile using ArcPy

You are listing field objects with ListFields, not the field names which should be input to DeleteField. So change:

[field for field in fields if field != "FID" or field != "Shape"]

to:

[field.name for field in fields if field.name not in ("FID","Shape")]

But it is probably better to use the required property since object id and shape fields can have different names in different feature classes:

for fc in fcList:
    fields_to_delete = [field.name for field in arcpy.ListFields(fc) if not field.required]
    fields_to_delete.pop() #Keep one non-required field
    for field in fields_to_delete:
        arcpy.DeleteField_management(fc, field)