Bir dizi değeri sıralama [kapalı]


112

Bunun gibi değerlerim var:

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'])  

Her birindeki değerleri setartan sırada sıralamak istiyorum . Kümeler arasında sıralamak istemiyorum, ama her kümedeki değerleri.


3
Tupleların problemle ne ilgisi var ve ne denediniz?
Fred Foo

3
Python setlerinin bir sıralama kavramı olduğunu düşünmüyorum. Bu size yardımcı olabilir: stackoverflow.com/questions/1653970/…
zallarak

3
bir set düzensizdir. bu onun özelliklerinden biridir. her dilde. bir list.
Karoly Horvath

4
@KarolyHorvath "bir küme düzensizdir. Bu, her dilde özelliklerinden biridir." C ++ 'lar std::setsıralanmıştır.
Timothy Shields

17
İnsanlar olaydan sonra neden bu soruyu kapattı (veya konu dışı)? Evet, OP bizi ondan çıkarması yerine problemini tarif etseydi daha iyi olurdu. Ama şimdi bunu yaptığımıza ve sorusunu eşleşecek şekilde düzenlediğimize ve bir cevabı kabul ettiğine göre, yakın oylamanın ne kadar mantıklı olduğunu anlamıyorum.
abarnert

Yanıtlar:


219

Bir yorumdan:

Her seti sıralamak istiyorum.

Bu kolay. Herhangi bir küme s(veya yinelenebilir herhangi bir şey) için, sorted(s)öğelerinin ssıralı düzende bir listesini döndürür :

>>> 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']

Unutmayın ki sortedsize a listdeğil, bir set. Bunun nedeni, hem matematikte hem de hemen hemen her programlama dilinde bir kümenin tüm amacı, * sıralı olmamasıdır: kümeler {1, 2}ve {2, 1}aynı küme.


Muhtemelen bu öğeleri dizeler olarak değil, sayılar olarak sıralamak istemezsiniz (bu nedenle 4.918560000, 10.277200999'dan sonra değil, 10.277200999'dan önce gelir).

En iyi çözüm, sayıları ilk etapta dizeler yerine sayılar olarak saklamaktır. Ancak değilse, yalnızca bir keyişlevi kullanmanız gerekir :

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

Daha fazla bilgi için, resmi belgelerdeki Sıralama NASIL belgesine bakın .


* İstisnalar için yorumlara bakınız.


1
@TimothyShields: Haklısın, "ortak terimleri kötüye kullanmayı sevmeyen her programlama dili" demeliydim. "Değiştirmeyen" in "mutasyona uğrayan" anlamına geldiği bir dilde, set"sıralı liste" anlamına gelmesi şaşırtıcı değil ve unordered_set"set" demek
istemelisiniz

2
Bu ismin iyi ya da kötü olup olmadığı tartışma konusu değil. "Kümeler asla herhangi bir dilde sıralanmaz" ifadesi yanlıştır.
Timothy Shields

5
Wikipedia sayfasında matematiksel bir setle ilgili "sırasız" kelimesini bulamazsınız. Ayrıca "sıralı" kelimesini de bulamazsınız. Bunun nedeni , setlerdeki matematiksel işlemlerle alakasız olmasıdır . Belirli bir dilin kümeleri sıralı yapıp yapmayacağı bir uygulama ayrıntısıdır. en.wikipedia.org/wiki/Set_(mathematics)
Timothy Shields

3
@TimothyShields: Bu arada, bağladığınız Set (matematik) üzerindeki wikipedia sayfasında "sırasız" kelimesi yok çünkü tanımdan zaten anlaşılıyor. Özellikle, "A ve B kümeleri, ancak ve ancak tam olarak aynı öğelere sahiplerse eşittir". Bu, düzenli koleksiyonlar için doğru değil. ("Bir kümenin veya çoklu kümenin öğelerinin listelendiği sıra alakasız" gibi cümleler de vardır, bu nedenle biraz farklı bir şekilde
araştırsaydınız

3
@TimothyShields: Ama std::set yok sipariş maruz (sadece API üzerinden bariz şekilde; sipariş işlevi aslında tip bir parçası herhangi bir kümenin). Öğelerin her zaman katı bir zayıf sırayla sıralanması, kavramın tam tanımının bir parçasıdır. Yani argümanınız tartışmalı. Ama olmasa bile, neden önemli olsun? Kümeler, tıpkı matematikte olduğu gibi hemen hemen her programlama dilinde sıralanmamış haldedir. Kelimeyi başka bir şey ifade etmek için kullanan tek bir dilin olması, bu ifadeyi daha az doğru yapmaz.
abarnert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.