Destroy doesn't work when also instantiating new objects

I got this function to create a few button elements:

 //Keep track of added perk buttons
 List<GameObject> displayedPerkButtons = new List<GameObject>();
 
 //Adds perk buttons based on the current chosenPerks.
    void PopulatePerkChooser()
    {
        //Removes any old perk buttons if present
        if (displayedPerkButtons.Count > 0)
        {
            for (int i = 0; i < displayedPerkButtons.Count; i++)
            {
                Destroy(displayedPerkButtons*.gameObject);*

}
displayedPerkButtons.Clear();
}

//For each perk in chosenPerks, instantiate a new PerkButton, run its construct function passing along the specific perk, and add it to the displayedPerkButtons list for future removal
for (int i = 0; i < PerkManager.Instance.chosenPerks.Count; i++)
{
GameObject newPerkButton = Instantiate(perkTemplate, perkButtonContainer.transform);
newPerkButton.GetComponent().ConstructPerkButton(PerkManager.Instance.chosenPerks*);*
displayedPerkButtons.Add(newPerkButton);
}

//Constructs “Random perk” button at the end, and add this as well to displayedPerkButtons
GameObject randomPerkButton = Instantiate(randomPerkTemplate, perkButtonContainer.transform);
displayedPerkButtons.Add(randomPerkButton);
}
It generates the buttons just fine, but it fails to destroy any old buttons if it is run more than once. Interestingly, if I make a second function that only contains the removal part, and run that separately after the first function, it removes the buttons as intended - so something seems to be wrong with how it interacts with the creation of the new buttons.
What might I be missing here?

Turns out the issue was due to the list of actual buttons to use - that list didn’t clear properly so it added copies of the same buttons to replace the deleted ones.