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.