How do I make it so that this scripts adds to a list without overfilling it.

How do I make it so I add things to a List every frame but the objects that are added refresh it with out going above the desired point?

EX: This is the script that I want to fix:

public WaterPuddleTeleport WTP;

public GameObject Player;

public float DistanceToPlayer;

// Start is called before the first frame update
void Start()
{
    Player = GameObject.FindGameObjectWithTag("Player");
}

// Update is called once per frame
void Update()
{
    WTP = GameObject.FindObjectOfType<WaterPuddleTeleport>();
    WTP.PuddleDistance.Add(this.gameObject.GetComponent<PuddleScript>().DistanceToPlayer);
    DistanceToPlayer = Vector3.Distance(this.transform.position, Player.transform.position);
}

I want to make it so that it refreshes the spot it had in the list.

You could get the index of the element which will be updated, remove the element from the list and use list.Insert(index) to add the updated element at the same position.

Unless you are creating and destroying Puddles all the time, you could build a List in Start() of all the Puddles. Find operations are time expensive.
Then in Update, iterate through it with a foreach loop and check the distance to your Player for each one.
Also, I think Magnitude() is more efficient that Distance() as a vector calculation.

Additional: Thinking a bit about it, the “Unity way” is to put a Collider around each Puddle and use the collider mechanics.