python - ومراكز - مفهوم اسس اختيار وبناء المجموعات




لماذا يتم بناء المجموعات من مجموعات مهيأة بشكل مختلف على قدم المساواة؟ (3)

بحيث يكون لديك قائمتان - لهما نفس المحتوى ولكن بترتيب مختلف ، يمكنك تحويلهما إلى مجموعات - والتي ستكون متساوية ، حيث تحتوي على نفس المحتوى.

عندما تقوم بتحويل هذه المجموعات إلى مجموعات ، سيتم تحويلها بنفس الترتيب ، كما هي في نفس المجموعة ، وبالتالي فإن المجموعات ستكون هي نفسها.

هذا صحيح في Python2.7 - ولكن من 3.3 فصاعدًا عندما يتم تجزئة العشوائية ، لن تكون قادرًا على ضمان ذلك - لأن المجموعتين ، على الرغم من أن المحتوى المتساوي في المحتوى لن يتكرر بشكل ضروري بنفس الترتيب.

كنت أتوقع اثنين tuples التالية

>>> x = tuple(set([1, "a", "b", "c", "z", "f"]))
>>> y = tuple(set(["a", "b", "c", "z", "f", 1]))

للمقارنة بين عدم المساواة ، لكنها لا:

>>> x == y
>>> True

لماذا هذا؟


لا يتم ترتيب المجموعات ويتم تعريفها فقط من خلال عضويتها.

على سبيل المثال ، قم set([1, 2]) == set([2, 1])

Tuples متساوية إذا كان أعضاؤها في كل موقف متساوٍ ، ولكن نظرًا لأن المجموعات قد تم إنشاؤها من التكرار بالتساوي (بترتيب متزايد) ، ينتهي الأمر بالتساوي أيضًا.


هناك شيئين في اللعب هنا.

  1. مجموعات غير مرتبة. set([1, "a", "b", "c", "z", "f"])) == set(["a", "b", "c", "z", "f", 1])

  2. عندما تقوم بتحويل مجموعة إلى tuple عبر مُنشئ tuple فإنها تتكرر بشكل أساسي على المجموعة وتضيف كل عنصر يتم إرجاعه بواسطة التكرار.

بناء الجملة من أجل tuples هو

tuple(iterable) -> tuple initialized from iterable's items

استدعاء tuple(set([1, "a", "b", "c", "z", "f"])) هو نفس استدعاء tuple([i for i in set([1, "a", "b", "c", "z", "f"])])

القيم ل

[i for i in set([1, "a", "b", "c", "z", "f"])]

و

[i for i in set(["a", "b", "c", "z", "f", 1])]

هي نفسها كما يتكرر على نفس المجموعة.

تحرير بفضلZeroPiraeus (تحقق من answer ). هذا غير مضمون. لن تكون قيمة التكرار هي نفسها دائمًا حتى بالنسبة لنفس المجموعة.

لا يعرف مُنشئ tuple الترتيب الذي تم به بناء المجموعة.





hashtable