Как удалить кортежи из списка кортежей? - PullRequest
0 голосов
/ 30 января 2019

У меня есть колода карт, и я беру руку.Потрясенный увиденным, я хочу сбросить вышеупомянутые карты и взять новую руку.Как мне это сделать?

По сути, я не могу отказаться от кортежей.Я не могу deck.remove(hand) их, и я не могу найти другой способ избавиться от них.Какие-либо предложения?Мой код ниже.(Я видел лучшие способы делать карты, но я еще недостаточно хорош в Python, чтобы использовать классы. Я просто ищу способ удалить любые кортежи в моей руке из колоды.)

import random
import itertools

suits = (" of Hearts", " of Spades", " of Clubs", " of Diamonds")
ranks = ("2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace")

deck = tuple("".join(card) for card in itertools.product(ranks, suits))

hand = random.sample(deck, 5)

print(hand)

for card in deck:
    if card in hand:
        # This is what I'm struggling to fill

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы не можете сменить колоду, потому что она кортежная, но вы можете воссоздать ее и оставить все как есть.Вот что я имею в виду:

import random
import itertools

suits = (" of Hearts", " of Spades", " of Clubs", " of Diamonds")
ranks = ("2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace")

deck = tuple("".join(card) for card in itertools.product(ranks, suits))

hand = random.sample(deck, 5)

# Removed hand from deck.
deck = tuple(card for card in deck if card not in set(hand))

Вы можете сделать что-то похожее, чтобы добавить к нему элементы.Если это будет происходить часто, вероятно, было бы лучше использовать изменяемый контейнер, такой как list или dict, который позволил бы вам изменять их содержимое без воссоздания всего этого.

0 голосов
/ 30 января 2019

Использовать операции над множествами.Простое решение

deck = tuple(set(deck) - set(tuple(hand))) # removes all the tuples from deck which are there in hand
...