Python 删除包含特定元素(卡)的元组
假设我有一个卡片列表(元组)。例如:Python 删除包含特定元素(卡)的元组,python,list,python-3.x,tuples,playing-cards,Python,List,Python 3.x,Tuples,Playing Cards,假设我有一个卡片列表(元组)。例如: [('H[A],'S[2]),('H[A],'H[3]),('H[A],'H[4])…] H[A]:红桃王牌和黑桃王牌[2]:黑桃王牌 卡片列表代表一对卡片的所有独特组合,你可以从一副10张卡片中取出。我所做的就是列出所有独特的组合,洗牌并从中抽取一个组合(每个组合有一副牌) 我现在要做的是删除那些包含“H[2]”或“S[4]”的对。然后返回一个更新的列表 有什么想法吗?让我知道!非常感谢您的帮助 编辑: -企图- [p for p in cards if
[('H[A],'S[2]),('H[A],'H[3]),('H[A],'H[4])…]
H[A]:红桃王牌和黑桃王牌[2]:黑桃王牌
卡片列表代表一对卡片的所有独特组合,你可以从一副10张卡片中取出。我所做的就是列出所有独特的组合,洗牌并从中抽取一个组合(每个组合有一副牌)
我现在要做的是删除那些包含“H[2]”或“S[4]”的对。然后返回一个更新的列表
有什么想法吗?让我知道!非常感谢您的帮助
编辑:
-企图-
[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:
-解决-
因此,解决方案是将两个元素“H[2]”和“S[4]”附加到列表j中
j=[j for item in ding for j in item]
j=[j for item in ding for j in item]
注意列表j中的每个元素都是字符串类型。i、 e
j[0] = H[2]
j[1] = S[4]
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]
[p for p in cards if j[0] not in p and j[1] not in p]
假设您正在将列表中的元组组合存储为
my\u list
。您可以使用列表理解来筛选列表,如下所示:
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\u列表
将包含其中没有H[2]
和S[4]
的所有对。您可以尝试以下方法:
cards = [(card1, card2) for (card1, card2) in cards if card1 not in ding[0] and card2 not in ding[0]]
因此,解决方案是将两个元素“H[2]”和“S[4]”附加到列表j中
j=[j for item in ding for j in item]
j=[j for item in ding for j in item]
注意列表j中的每个元素都是字符串类型。i、 e
j[0] = H[2]
j[1] = S[4]
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]
[p for p in cards if j[0] not in p and j[1] not in p]
你的尝试在哪里?我的尝试很差,没有包括在这里。不过,我会在回家后立即添加尝试。刚刚添加了我的尝试!任何帮助都会很好。感谢您使用原始完整列表副本中的索引访问更改列表。在第一次删除之后,您将开始获得不正确的索引。当您要从中删除内容的列表长度短于您正在查看的索引后,您将在下次尝试删除时得到一个
索引器。@TigerhawkT3:是的,您是对的。更新了答案card1
和card2
都不在ding
中,因为ding
持有元组,而card1
和card2
是这些元组的元素。例如,[('H[2]','S[4]]]
中的'H[2]'是False
。因此,我认为这里的总体思路是访问元素'H[2]'和'S[4]'。然后遍历卡片列表,检查这些元素是否存在。如果他们这样做了,就移除/删除元组。因此,他只需要签入ding[0]
。