此python代码有问题:
card_list = ["1P", "1C", "1O","1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O",
"3E", "4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O",
"6E", "7P", "7C", "7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP",
"DC", "DO", "DE", "JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE",
"1P", "1C", "1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O", "3E",
"4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O", "6E", "7P", "7C",
"7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP", "DC", "DO", "DE",
"JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE", "1P", "1C",
"1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O", "3E", "4P", "4C", "4O", "4E",
"5P", "5C", "5O", "5E", "6P", "6C", "6O", "6E", "7P", "7C", "7O", "7E", "8P", "8C",
"8O", "8E", "9P", "9C", "9O", "9E", "DP", "DC", "DO", "DE", "JP", "JC", "JO", "JE",
"VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE"]
#print all cards
print card_list
#cards from a deck
cards_deck = ["1P", "1C", "1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O",
"3E", "4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O",
"6E", "7P", "7C", "7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP",
"DC", "DO", "DE", "JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE"]
#remove deck cards from card pool
final_card= list(set(card_list).difference(set(cards_deck)))
#print remaining cards
print final_card
最后,它应该只删除一个“ 1P”,一个“ 1C”等,但是最后删除所有它们并显示一个空数组。无论如何,我只能显示剩余的卡片?
目标是拥有大量的纸牌,并从该大纸牌中不断移除“ cards_deck”(如其成型甲板),直到不再可用为止。
我该怎么做?
答案 0 :(得分:1)
如@tobias_k所述,您可以使用Counter:
from collections import Counter
card_list = ["1P", "1C", "1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O",
"3E", "4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O",
"6E", "7P", "7C", "7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP",
"DC", "DO", "DE", "JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE",
"1P", "1C", "1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O", "3E",
"4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O", "6E", "7P", "7C",
"7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP", "DC", "DO", "DE",
"JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE", "1P", "1C",
"1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O", "3E", "4P", "4C", "4O", "4E",
"5P", "5C", "5O", "5E", "6P", "6C", "6O", "6E", "7P", "7C", "7O", "7E", "8P", "8C",
"8O", "8E", "9P", "9C", "9O", "9E", "DP", "DC", "DO", "DE", "JP", "JC", "JO", "JE",
"VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE"]
# print all cards
print card_list
# cards from a deck
cards_deck = ["1P", "1C", "1O", "1E", "2P", "2C", "2O", "2E", "3P", "3C", "3O",
"3E", "4P", "4C", "4O", "4E", "5P", "5C", "5O", "5E", "6P", "6C", "6O",
"6E", "7P", "7C", "7O", "7E", "8P", "8C", "8O", "8E", "9P", "9C", "9O", "9E", "DP",
"DC", "DO", "DE", "JP", "JC", "JO", "JE", "VP", "VC", "VO", "VE", "RP", "RC", "RO", "RE"]
counts = Counter(card_list)
while counts:
# remove deck cards from card pool
for card in cards_deck:
counts[card] -= 1
if counts[card] == 0:
counts.pop(card)
final_card = [card for card in counts.elements()]
# print remaining cards
print final_card
输出
['1P', '1C', '1O', '1E', '2P', '2C', '2O', '2E', '3P', '3C', '3O', '3E', '4P', '4C', '4O', '4E', '5P', '5C', '5O', '5E', '6P', '6C', '6O', '6E', '7P', '7C', '7O', '7E', '8P', '8C', '8O', '8E', '9P', '9C', '9O', '9E', 'DP', 'DC', 'DO', 'DE', 'JP', 'JC', 'JO', 'JE', 'VP', 'VC', 'VO', 'VE', 'RP', 'RC', 'RO', 'RE', '1P', '1C', '1O', '1E', '2P', '2C', '2O', '2E', '3P', '3C', '3O', '3E', '4P', '4C', '4O', '4E', '5P', '5C', '5O', '5E', '6P', '6C', '6O', '6E', '7P', '7C', '7O', '7E', '8P', '8C', '8O', '8E', '9P', '9C', '9O', '9E', 'DP', 'DC', 'DO', 'DE', 'JP', 'JC', 'JO', 'JE', 'VP', 'VC', 'VO', 'VE', 'RP', 'RC', 'RO', 'RE', '1P', '1C', '1O', '1E', '2P', '2C', '2O', '2E', '3P', '3C', '3O', '3E', '4P', '4C', '4O', '4E', '5P', '5C', '5O', '5E', '6P', '6C', '6O', '6E', '7P', '7C', '7O', '7E', '8P', '8C', '8O', '8E', '9P', '9C', '9O', '9E', 'DP', 'DC', 'DO', 'DE', 'JP', 'JC', 'JO', 'JE', 'VP', 'VC', 'VO', 'VE', 'RP', 'RC', 'RO', 'RE']
['1P', '1P', 'DO', 'DO', '3P', '3P', 'JP', 'JP', '5P', '5P', 'VC', 'VC', '3C', '3C', '1C', '1C', 'JO', 'JO', '1E', '1E', '5E', '5E', 'JE', 'JE', '8E', '8E', '3E', '3E', 'JC', 'JC', '7E', '7E', '2O', '2O', '7C', '7C', '9O', '9O', '7O', '7O', '9C', '9C', '9E', '9E', 'RE', 'RE', '5C', '5C', '7P', '7P', '9P', '9P', 'RO', 'RO', 'DE', 'DE', '2P', '2P', 'VE', 'VE', 'RC', 'RC', '4P', '4P', 'DC', 'DC', 'VP', 'VP', '4O', '4O', '2C', '2C', 'RP', 'RP', '4E', '4E', '4C', '4C', '8O', '8O', '1O', '1O', '6C', '6C', '6E', '6E', 'DP', 'DP', '2E', '2E', '8C', '8C', '5O', '5O', '6O', '6O', '6P', '6P', 'VO', 'VO', '3O', '3O', '8P', '8P']
['1P', 'DO', '3P', 'JP', '5P', 'VC', '3C', '1C', 'JO', '1E', '5E', 'JE', '8E', '3E', 'JC', '7E', '2O', '7C', '9O', '7O', '9C', '9E', 'RE', '5C', '7P', '9P', 'RO', 'DE', '2P', 'VE', 'RC', '4P', 'DC', 'VP', '4O', '2C', 'RP', '4E', '4C', '8O', '1O', '6C', '6E', 'DP', '2E', '8C', '5O', '6O', '6P', 'VO', '3O', '8P']
[]
说明
想法是减少while循环的每次迭代中card_deck
中每张卡的数量,直到counts
中没有卡为止。当一张卡的数量变为0时,将其从counts
中删除。
答案 1 :(得分:0)
出现问题的原因是set从列表中获取了不同的元素,因此最终要减去两组完全相同的元素。因此,您的集合差异是一个空集合。
您可以这样解决您的问题。
final_card = filter(None, [each if each not in cards_deck else cards_deck.remove(each) for each in card_list ])
编辑:
要查找您可以从卡片中制作的牌组总数。
from collections import Counter
card_counter = Counter(card_list)
check_if_all_cards_exist = set(card_list).difference(cards_deck)
if check_if_all_cards_exist:
number_of_decks = min(card_counter.values())
else:
number_of_decks = 0
答案 2 :(得分:0)
希望这可以回答您的问题。我创建了一个新列表,其中仅包含cards_deck
中不存在的元素。
print("CARDLIST:",len(card_list))
print("CARD_DECK:",len(cards_deck))
final_card = [card_list[card_list.index(card)] for card in cards_deck if card in card_list]
print("AFTER DIFFERENCE:" ,len(card_list) - len(final_card))
print(final_card)
输出:
CARDLIST: 156
CARD_DECK: 51
AFTER DIFFERENCE: 105
['7E', '1P', '1C', '1O', '1E', '2P', '2C', '2O', '2E', '3P', '3C', '3O', '3E', '4P', '4C', '4O', '4E', '5P', '5C', '5O', '5E', '6P', '6C', '6O', '6E', '7P', '7C', '7O', '7E', '8P', '8C', '8O', '8E', '9P', '9C', '9O', '9E', 'DP', 'DC', 'DO', 'DE', 'JP', 'JC', 'JO', 'JE', 'VP', 'VC', 'VO', 'VE', 'RP', 'RC', 'RO', 'RE', '1P', '1C', '1O', '1E', '2P', '2C', '2O', '2E', '3P', '3C', '3O', '3E', '4P', '4C', '4O', '4E', '5P', '5C', '5O', '5E', '6P', '6C', '6O', '6E', '7P', '7C', '7O', '7E', '8P', '8C', '8O', '8E', '9P', '9C', '9O', '9E', 'DP', 'DC', 'DO', 'DE', 'JP', 'JC', 'JO', 'JE', 'VP', 'VC', 'VO', 'VE', 'RP', 'RC', 'RO', 'RE']