Bunu yapmanın en iyi yolu listeleri sıralamak ve karşılaştırmaktır. (Kullanılması Counter
, yıkanamayan nesnelerle çalışmaz.) Bu, tamsayılar için basittir:
sorted(a) == sorted(b)
Keyfi nesnelerle biraz daha karmaşıklaşıyor. Nesne kimliğini, yani her iki listede de aynı nesnelerin olup olmadığını önemsiyorsanız , id()
işlevi sıralama anahtarı olarak kullanabilirsiniz .
sorted(a, key=id) == sorted(b, key==id)
(Python 2.x'te aslında key=
parametreye , çünkü herhangi bir nesneyi herhangi bir nesneyle karşılaştırabilirsiniz. Sıralama keyfi ancak sabittir, bu nedenle bu amaç için iyi çalışır; nesnelerin hangi sırada olduğu önemli değildir. Ancak, Python 3'te, farklı türlerdeki nesneleri karşılaştırmak pek çok durumda izin verilmez - örneğin, dizeleri tamsayılarla karşılaştıramazsınız - yani nesneleriniz varsa çeşitli türlerde, nesnenin kimliğini açıkça kullanmak için en iyisidir.)
Öte yandan listedeki nesneleri değere göre karşılaştırmak istiyorsanız , önce nesneler için "değer" in ne anlama geldiğini tanımlamanız gerekir. O zaman bunu bir anahtar olarak (ve Python 3 için tutarlı bir tür olarak) sağlamanın bir yoluna ihtiyacınız olacak. Birçok keyfi nesne için işe yarayabilecek potansiyel bir yol, bunlara göre sıralamaktır repr()
. Tabii ki, bu repr()
büyük listeler ve benzeri için çok fazla zaman ve hafıza oluşturma dizeleri harcayabilir .
sorted(a, key=repr) == sorted(b, key==repr)
Nesnelerin tümü kendi türünüzdeyse, __lt__()
nesnenin kendisini başkalarıyla nasıl karşılaştıracağını bilmesi için bunları tanımlayabilirsiniz . Sonra onları sıralayabilir ve key=
parametre hakkında endişelenmeyebilirsiniz . Tabii ki daha hızlı olacak olan tanımlayabilir __hash__()
ve kullanabilirsiniz Counter
.