我有2節課。AlchemicalStorage 類用于存盤 AlchemicalElement 物件。
class AlchemicalElement:
def __init__(self, name: str):
self.name = name
def __repr__(self):
return f'<AE: {self.name}>'
class AlchemicalStorage:
def __init__(self):
self.storage_list = []
我已經有一個向 AlchemicalStorage 添加元素的功能。我需要的是一個函式,它可以按名稱從存盤中洗掉并回傳先前添加的元素。
到目前為止我所擁有的:
def add(self, element: AlchemicalElement):
if isinstance(element, AlchemicalElement):
self.storage_list.append(element)
else:
raise TypeError()
def pop(self, element_name: str) -> AlchemicalElement or None:
"""
Remove and return previously added element from storage by its name.
If there are multiple elements with the same name, remove only the one that was added most recently to the
storage. If there are no elements with the given name, do not remove anything and return None.
:param element_name: Name of the element to remove.
:return: The removed AlchemicalElement object or None.
"""
self.storage_list.append(element_name)
return self.storage_list.pop()
顯然 pop() 函式是不正確的。我無法弄清楚這里的邏輯是什么。
我想要實作的一個例子:
storage.add(AlchemicalElement('Fire'))
storage.add(AlchemicalElement('Water'))
storage.add(AlchemicalElement('Water'))
print(storage.pop('Water') == element_three) # True
print(storage.pop('Water') == element_two) # True
uj5u.com熱心網友回復:
您可以向后遍歷存盤串列并回傳第一個實體(如果存在):
def pop(self, element_name: str) -> AlchemicalElement | None:
for element in reversed(self.storage_list):
if element.name == element_name:
self.storage_list.remove(element)
return element
return None
uj5u.com熱心網友回復:
如果為 定義__eq__(相等)函式AlchemicalElement,則可以使用 來檢查元素是否在串列中in。請參閱有關eq的 Python 檔案。如果要與字串 ( 'Helium') 和Elements 進行比較,則應使用isinstance()檢查 other 的型別并采取相應措施。
現在,在 中AlchemicalStorage,您可以使用 . 檢查元素是否在串列中in。如果它在串列中,您可以reverse()列出,使用remove((洗掉第一次出現,但因為您顛倒了它,所以洗掉了最后一次),然后reverse()再次使用。
下面的代碼說明了這一點。
我使用了打字提示;如果你不熟悉它,你可以忽略它。
from typing import Union
class Element:
def __init__(self, name: str):
self.name = name
def __eq__(self, other):
return self.name == other.name
def __repr__(self) -> str:
return self.name
class Element_List:
def __init__(self):
self.elements = []
def add(self, element: Element) -> None:
self.elements.append(element)
def pop(self, element: Element) -> Union[None, Element]:
if element in self.elements:
self.elements.reverse()
self.elements.remove(element)
self.elements.reverse()
return element
return None
# Wel will try to remove the last Helium element from the list...
elements = [Element('Hydrogen'), Element('Helium'), Element('Lithium'), Element('Helium'), Element('Lithium')]
element_list = Element_List()
for element in elements:
element_list.add(element)
print(f'Element list before pop: {element_list.elements}')
element_list.pop(Element('Helium'))
print(f'Element list after pop: {element_list.elements}')
在線嘗試!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/531678.html
標籤:Python列表班级哎呀
上一篇:我如何呼叫這個方法?
