簡體   English   中英

如何從列表中刪除x個相同元素的多個實例?

[英]How can I remove x multiple instances of same element from list?

我對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”。 希望這是有道理的。

您可以使用list count()方法:

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']

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

這將創建一個新列表。

此代碼將刪除任何項目中有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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM