Search code examples
pythondatetimesetlist-comprehensionpython-datetime

I cant remove a datetime object from my set?


base = datetime.date.today()
dateset = set([base + datetime.timedelta(days=x) for x in range(20)]

for d in dateset:
 if d.weekday() == 0:
  dateset.discard(d)

So as you can see I want to remove any datetime object that has a weekday() of 0.

However the above code throws the error RuntimeError: Set changed size during iteration

Any help is much appreciated.


Solution

  • Rather than creating the set then removing items, you could just only put items into the set that you want in the first place.

    Code:

    base = datetime.date.today()
    dateset = set([base + datetime.timedelta(days=x) for x in range(20) if (base + datetime.timedelta(days=x)).weekday() != 0])
    

    Output:

    >>> dateset
    {datetime.date(2019, 12, 4),
     datetime.date(2019, 12, 5),
     datetime.date(2019, 12, 6),
     datetime.date(2019, 12, 7),
     datetime.date(2019, 12, 8),
     datetime.date(2019, 12, 10),
     datetime.date(2019, 12, 11),
     datetime.date(2019, 12, 12),
     datetime.date(2019, 12, 13),
     datetime.date(2019, 12, 14),
     datetime.date(2019, 12, 15),
     datetime.date(2019, 12, 17),
     datetime.date(2019, 12, 18),
     datetime.date(2019, 12, 19),
     datetime.date(2019, 12, 20),
     datetime.date(2019, 12, 21),
     datetime.date(2019, 12, 22)}