2023年4月26日水曜日

Pythonのlist内に独自クラスが含まれている場合に重複を排除する方法

Pythonのlist内に独自クラスが含まれている場合に重複を排除する方法

概要

結論としては独自クラス内に hash と eq メソッドを定義することです

環境

  • Python 3.10.2

サンプルコード

class User():

    def __init__(self,
                 name: str,
                 age: int) -> None:
        self.name = name
        self.age = age

    def __eq__(self, other) -> bool:
        return (self.name, self.age) == (other.name, other.age)

    def __hash__(self) -> int:
        return hash((self.name, self.age))


u1 = User("hawk", 10)
u2 = User("hawk", 20)
u3 = User("hawk", 30)
u4 = User("snowlog", 10)
u5 = User("snowlog", 20)
u6 = User("snowlog", 30)
u7 = User("hawk", 20)
u8 = User("snowlog", 30)
users = [u1, u2, u3, u4, u5, u6, u7, u8]

print(len(users))  # => 8
print(users)
unique_users = list(set(users))
print(len(unique_users))  # => 6
print(unique_users)

参考サイト

0 件のコメント:

コメントを投稿