如何从列表中删除x个相同元素的多个实例?

时间:2019-06-15 16:18:53

标签: python

我对Python相当陌生,正在尝试编写基于文本的游戏,该游戏使用从包括资源卡在内的各种卡组中抽取卡牌的方法。我正在尝试编写代码,使用户可以交易自己的资源以使用列表进行其他操作。如果用户交易每种资源中的1种,但是如果他们要交易3种相同资源,我就遇到了麻烦。

我在这里和几个不同的站点上进行了搜索,但是他们只说了如何删除列表中元素的所有实例。引用列表中的索引,例如。使用pop或del不能正常工作,因为用户手中的纸牌在游戏中不断变化。

resources = ["A","A","B","C","A","B"]

print(resources)

if "A" in resources and "B" in resources and "C" in resources:
    resources.remove("A")
    resources.remove("B")
    resources.remove("C")
else:
    print("You do not have 1 of each resource!")

print(resources)

for i in range(3):
    if "A" in resources:
        resources.remove("A")
    else:
        print("You do not have 3 of 'A' resource!")

print(resources)

这不是我要查找的内容,即使用户没有3的“ A”,它也会删除2的“ A”。我需要某种方式来检查用户的手以查看他们是否拥有3个或更多的“ A”,如果没有,请不要删除任何“ A”。希望这有道理。

2 个答案:

答案 0 :(得分:1)

您可以使用list的{​​{1}}方法:

resources = ["A","A","B","C","A","B"]

# check if user has 3+ "A"
if resources.count("A") > 2:
    # yes, remove 2 "A"s
    for i in range(2):
        resources.remove("A")

print(resources)

打印:

['B', 'C', 'A', 'B']

答案 1 :(得分:0)

如果您不想更改原始列表,这可能会很有用。

这将创建一个新列表。

此代码将删除除2个项目之外的所有项目(其中2个以上)。我加了四个D来演示。

from collections import Counter

resources = ["A","A","B","C","A","B", *["D"] * 4]

list(''.join(item * 2 if count > 2 else item * count 
             for item, count in Counter(resources).items()))

输出:['A', 'A', 'B', 'B', 'C', 'D', 'D']