Removing matching items from a list?
Roy Smith
roy at panix.com
Sat Aug 3 17:02:45 EDT 2013
In article <6c0bdea5-23bd-4854-8016-4bf0af3b7d0e at googlegroups.com>,
kevin4fong at gmail.com wrote:
> let's say there is a list:
>
> pHands[0] = ['ad', 'ac', 'as', 'ah', '7d', '8s', '9d', 'td', 'js', 'jd']
I assume this is a card game, and these are cards (ad = Ace of Diamonds,
etc).
> I'm trying to make a function where a search is initiated into the list and
> any matching items with a first matching number/letter reaching four are
> removed
I'm not quite sure how to parse that, but I think what you're saying
(using the deck of cards model) is you want to find all the sets of 4
cards of the same rank. In the example above, you've got all four aces
(which, in the wrong saloon, can get you shot).
I think I would do something like:
-----------------------------------------
import collections
def remove_four_of_a_kind(hand):
ranks = [card[0] for card in hand]
counts = collections.Counter(ranks)
fours = [rank for rank, count in counts.items() if count == 4]
new_hand = [card for card in hand if card[0] not in fours]
return new_hand
hand = ['ad', 'ac', 'as', 'ah', '7d', '8s', '9d', 'td', 'js', 'jd']
print remove_four_of_a_kind(hand)
-----------------------------------------
$ python cards.py
['7d', '8s', '9d', 'td', 'js', 'jd']
I just gave a class yesterday where we covered list comprehensions and
Counters, so maybe I just have comprehensions on the brain today :-)
More information about the Python-list
mailing list