[英]Remove an object from a list of objects by attribute
我有一個對象列表。 該列表包含 Players,每個 Player 有 3 個屬性。 player_name、player_number 和玩家位置。 我想通過 player_name 搜索列表,找到該對象的第一個實例並刪除該對象。
p1 = Player("Pete", "12", "runner")
p2 = Player("John", "5", "catcher")
p3 = Player("John", "29", "guard")
player.list = [p1, p2, p3]
我想刪除 john 的第一個實例,即 p2
我可以搜索列表並找到他,但我不知道如何刪除他的整個對象。 我想以某種方式使用 .remove() ,因為我知道它在第一次看到它時有效,但我無法弄清楚。
for i in player.list:
if i.player_name == "John":
player.list.remove(i)
我的方法的問題是它刪除了所有這些,因為它遍歷整個列表。 搜索此列表的更好方法是什么,也許添加一個計數器或其他什么?
只需形成一個新列表:
players = [item
for item in player.list
if not item.player_name == "John"]
for i in player.list:
if i.player_name == "John":
player.list.remove(i)
break
這是一個簡單的解決方案:找到播放器(如果有),如果找到則將其刪除。
if any((to_go:= p).player_name == "John" for p in player.list):
player.list.remove(to_go)
any(p.player_name == "John" for p in player.list)
如果列表中的任何玩家的名字為 John,則返回True
,並盡快停止迭代。 如果不存在這樣的玩家,則返回False
。
Python 3.8 中的賦值表達式讓您可以捕捉到一個名為 John 的玩家存在這一事實的“見證”,即玩家對象本身。
在if
語句中,我們只是將to_go
傳遞給player.list.remove
以在any
退出之前刪除綁定到to_go
的最后一個玩家。 我們只在有any
返回True
調用remove
; 否則,如果沒有人的名字是約翰,我們將錯誤地刪除列表中的最后一個玩家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.