您好,登錄后才能下訂單哦!
在Python中,set
是一個(gè)無序的不重復(fù)元素集。如果你想要將自定義對(duì)象添加到集合中,或者從集合中刪除自定義對(duì)象,你需要確保該對(duì)象是可哈希的(hashable)??晒5膶?duì)象必須滿足以下兩個(gè)條件:
如果你的自定義對(duì)象滿足這些條件,你可以通過以下步驟將其與set
結(jié)合使用:
__hash__()
和__eq__()
方法。__hash__()
方法返回一個(gè)整數(shù),表示對(duì)象的哈希值;__eq__()
方法用于比較兩個(gè)對(duì)象是否相等。下面是一個(gè)簡(jiǎn)單的例子:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
def __repr__(self):
return f'Person({self.name!r}, {self.age})'
def __hash__(self):
return hash((self.name, self.age))
def __eq__(self, other):
if isinstance(other, Person):
return self.name == other.name and self.age == other.age
return False
# 創(chuàng)建一個(gè)集合
people = set()
# 創(chuàng)建一些Person對(duì)象
person1 = Person('Alice', 30)
person2 = Person('Bob', 25)
person3 = Person('Alice', 30) # 注意:這個(gè)對(duì)象與person1實(shí)際上是相同的,因?yàn)樗鼈冇邢嗤膎ame和age
# 將Person對(duì)象添加到集合中
people.add(person1)
people.add(person2)
# 嘗試添加一個(gè)與已有對(duì)象相等的對(duì)象
# 這不會(huì)引發(fā)錯(cuò)誤,因?yàn)榧现幸呀?jīng)有一個(gè)相同的對(duì)象
people.add(person3)
# 打印集合
print(people) # 輸出可能是:{Person('Alice', 30), Person('Bob', 25)},注意順序可能不同
注意:在這個(gè)例子中,Person
類是不可變的,因?yàn)樗膶傩?code>_name和_age
都是只讀的(通過@property裝飾器)。如果_name
或_age
是可變的,那么Person
類就不能被添加到集合中,因?yàn)榭勺兊膶?duì)象是不可哈希的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。