首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列表中删除同一元素的x个多个实例?

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

Stack Overflow用户
提问于 2019-06-16 00:18:53
回答 2查看 77关注 0票数 0

我是Python的新手,正在尝试写一个基于文本的游戏,它使用从各种卡片中提取的卡片,包括资源卡片。我正在尝试编写代码,使用户能够交易他们手中的资源,以使用列表做其他事情。我已经设法做到了这一点,如果用户交易每个资源的1个,但如果他们想交易相同资源的3个,则会遇到麻烦。

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

代码语言:javascript
复制
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”。希望这是有意义的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-16 00:22:35

可以使用listcount()方法

代码语言:javascript
复制
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)

打印:

代码语言:javascript
复制
['B', 'C', 'A', 'B']
票数 1
EN

Stack Overflow用户

发布于 2019-06-16 01:19:24

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

这将创建一个新列表。

此代码将删除除2项以外的所有项,其中任何项的数量超过2项。我添加了四个D来演示。

代码语言:javascript
复制
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']

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56612119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档