Python中的復數是由實數和虛數組成的,虛數的表示方式是在數字后面加上一個字母“j”,例如3j,其中3是實數,j是虛數部分。
在對復數進行去重的時候,通常是將其轉換為字符串進行比較,然后再將其轉回復數。但是,當復數中存在大量重復的虛數部分時,這種方法效率較低。
解決這個問題的方法是自定義復數的比較方法,通過重載__eq__和__hash__方法,讓Python在比較復數是否相等時只比較虛數部分。
class Complex: def __init__(self, real, imag): self.real = real self.imag = imag def __eq__(self, other): return self.imag == other.imag def __hash__(self): return hash(self.imag) c1 = Complex(1, 2j) c2 = Complex(2, 2j) c3 = Complex(3, 3j) c4 = Complex(4, 2j) lst = [c1, c2, c3, c4, c1, c2] print(list(set(lst)))
在上面的代碼中,我們定義了一個Complex類,并重載了__eq__和__hash__方法。在__eq__方法中,我們只比較虛數部分是否相等;在__hash__方法中,我們只計算虛數部分的哈希值。
最后,我們創建了四個不同的復數對象,其中有兩個虛數部分相同的對象,將它們放入列表中,使用set()函數去重后輸出結果。
通過這種方法,我們可以高效地對復數列表進行去重,提高程序的執行效率。