[英]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.