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)