所以,假设我有一张卡片(元组)列表。如,
[('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)
我现在要做的是删除/删除包含'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]
答案 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]]