删除包含特定元素(卡片)的元组

时间:2016-11-03 06:00:36

标签: python list python-3.x tuples playing-cards

所以,假设我有一张卡片(元组)列表。如,

[('H[A]', 'S[2]'), ('H[A]', 'H[3]'), ('H[A]', 'H[4]')....]

H [A]:心中之王& S [2]:黑桃2。

卡片列表代表您可以从10张卡片中获得的一对卡片的所有独特组合。我所做的只是列出所有独特的组合,将它们洗牌并从中抽出1个组合(每个组合都有一对牌)

def chooseobjects(r):
    """
    Finds all unique pairs of cards in a deck of 10 cards.
    Mathematically, this is just nCr. i.e., 10C2 is 10 Choose 2.
    """
    results = list(itertools.combinations(["H[A]","H[2]","H[3]","H[4]","H[5]",
                                           "S[A]","S[2]","S[3]","S[4]","S[5]",
                                            ],r))
    return results

def draw(n,cards):
    """
    Draw n pair(s) of card from all the unique pairs generated from chooseobjects method.
    """
    random.shuffle(cards)
    return [cards.pop() for k in range(n)]

cards=chooseobjects(2) 
print("These are all the different unique combinations: "'\n',cards)
n=1
ding=draw(n,cards)
print("We randomly drew this pair: "'\n', ding)
print("The remaining unique pairs: "'\n',cards)

enter image description here

我现在要做的是删除/删除包含'H [2]'或'S [4]'的对。然后返回更新列表。

有什么想法吗?让我知道!非常感谢任何帮助!

编辑: -ATTEMPT -

[p for p in cards if "H[2]" not in p and "S[4]" not in p]

上面的代码返回一个元组列表,其中H [2]和S [4]不存在。

是否有更优雅的方法将H [2]和S [4]隐式传递到列表推导中而不必显式声明/声明它们?让我知道!

编辑2: -SOLVED -

因此,解决方案是将两个元素'H [2]'和'S [4]'附加到列表j中。

j=[j for item in ding for j in item]

注意列表j中的每个元素都是字符串类型。即,

j[0] = H[2]
j[1] = S[4]

然后我们创建一个列表推导来迭代'cards'列表中的每个元组。如果元组中没有出现j [0]和j [1],我们将它们全部附加到新列表中!

[p for p in cards if j[0] not in p and j[1] not in p]

3 个答案:

答案 0 :(得分:0)

因此,解决方案是将两个元素'H [2]'和'S [4]'附加到列表j中。

j=[j for item in ding for j in item]

注意列表j中的每个元素都是字符串类型。即,

j[0] = H[2]
j[1] = S[4]

然后我们创建一个列表推导来迭代'cards'列表中的每个元组。如果元组中没有出现j [0]和j [1],我们将它们全部附加到新列表中!

[p for p in cards if j[0] not in p and j[1] not in p]

答案 1 :(得分:-1)

假设您将列表中的元组组合存储为my_list。您可以使用 list comprehension 将列表过滤为:

new_list = [card_pair for card_pair in my_list if 'H[2]' not in card_pair and 'S[4]' not in card_pair]

此处new_list将包含其中没有H[2]S[4]的所有对。

答案 2 :(得分:-1)

您可以尝试这样的事情:

cards = [(card1, card2) for (card1, card2) in cards if card1 not in ding[0] and card2 not in ding[0]]