'Trouble getting list of words given a list of available letters for each character (Python)

I have a list of words that I would like to go through and remove any that don't fit my criteria.

The criteria is a list of lists of letters that are possible for each character.

letters = [['l','e'],['a','b','c'],['d','e','f']]
words = ['lab','lad','ebf','tem','abe','dan','lce']

The function I have written to try and solve this is:

def calc_words(letters,words):
    for w in words:
        for i in range(len(letters)):
          if w in words:
            for j in letters[i]:
              if w in words:
                if j != w[i]:
                    words.remove(w)
    return words

The output when I run the function calc_words(letters,words) should be ['lad', 'ebf', 'lce']. But, I get ['lad', 'tem', 'dan'] instead.

I can't figure out what is going on. I'm relatively new to Python, so if someone either knows what is going wrong with my function, or knows a different way to go about this, I would appreciate any input.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source