I hope this hasn’t been asked before but it’s hard for me to put into words what it is I’m trying to do!
It might be easier if I explain my input, and desired output
l1 = [[(14, 'h'), (14, 'd')], [(14, 'h'), (14, 'c')], [(14, 'h'), (14, 's')], [(14, 'd'), (14, 'c')], [(14, 'd'), (14, 's')], [(14, 'c'), (14, 's')], [(13, 'h'), (13, 'd')], [(13, 'h'), (13, 'c')], [(13, 'h'), (13, 's')], [(13, 'd'), (13,'c')], [(13, 'd'), (13, 's')], [(13, 'c'), (13, 's')], [(12, 'h'), (12, 'd')], [(12, 'h'), (12, 'c')], [(12, 'h'), (12, 's')], [(12, 'd'), (12, 'c')], [(12, 'd'), (12, 's')], [(12, 'c'), (12, 's')]]
l2 = [(13,'h'),(13,'d'),(14,'c'),(14,'s'),(14,'h')]
So this first list, l1, is a list of lists, each list is a poker hand of 2 cards.
Basically what I’m trying to do is if a card is in l2, the hand in l1 needs to be removed. So the entry [(14,’d’),(14,’c’)] needs to be removed from l1 because (14,’c’) is in l2– even though (14,’d’) isn’t in l2.
The desired output from this example should be,
[[(13, 'c'), (13, 's')], [(12, 'h'), (12, 'd')], [(12, 'h'), (12, 'c')], [(12, 'h'), (12, 's')], [(12, 'd'), (12, 'c')], [(12, 'd'), (12, 's')], [(12, 'c'), (12, 's')]]
I thought about iterating over all the tuples inside l1 and removing them if they’re in l2, then afterwards go back and iterate over the lists in l1 and remove any without len == 2. This doesn’t seem like the best way to go, though.
Any thoughts?
ManyTIA!
If the entry may contain ≥2 members, you could generalize the filter condition to