it-swarm.dev

فرز مجموعة من القيم

لدي قيم مثل هذا:

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])  

أريد فرز القيم في كل set بترتيب متزايد. لا أريد الفرز بين المجموعات ، لكن القيم في كل مجموعة.

83
Justin Carrey

من تعليق:

أريد أن فرز كل مجموعة.

هذا سهل. لأي مجموعة s (أو أي شيء آخر قابل للتكرار) ، sorted(s) تقوم بإرجاع قائمة بعناصر s بالترتيب الفرز:

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
>>> sorted(s)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000']

لاحظ أن sorted يمنحك list ، وليس set. ذلك لأن النقطة الكاملة للمجموعة ، في الرياضيات و تقريبًا كل لغة برمجة ، * هي أنها غير مرتبة: المجموعات {1, 2} و {2, 1} هي نفس المجموعة.


ربما لا ترغب حقًا في تصنيف هذه العناصر كسلسلة ، ولكن كأرقام (لذلك ، سوف تأتي 4.918560000 قبل 10.277200999 بدلاً من بعد).

الحل الأفضل هو على الأرجح تخزين الأرقام كأرقام بدلاً من سلاسل في المقام الأول. ولكن إذا لم يكن الأمر كذلك ، فأنت بحاجة فقط إلى استخدام دالة key:

>>> sorted(s, key=float)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999']

لمزيد من المعلومات ، راجع Sorting HOWTO في المستندات الرسمية.


* انظر التعليقات للاستثناءات.

164
abarnert