Сортировка набора значений [закрыто]

112

У меня такие ценности:

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в порядке возрастания. Я хочу сортировать не между наборами, а значения в каждом наборе.

Джастин Керри
источник
3
Какое отношение имеют кортежи к проблеме и что вы пробовали?
Fred Foo
3
Я не думаю, что в наборах Python есть концепция упорядочивания. Это может вам помочь: stackoverflow.com/questions/1653970/…
zallarak
3
набор без заказа. это одно из его свойств. на всех языках. используйте файл list.
Karoly Horvath
4
@KarolyHorvath «набор не упорядочен. Это одно из его свойств. На всех языках». С ++ std::setзаказан.
Тимоти Шилдс
17
Почему люди закрыли (или не по теме) этот вопрос постфактум? Да, было бы лучше, если бы ОП описал свою проблему, а не заставлял нас выудить ее из него. Но теперь, когда мы это сделали, отредактировали его вопрос, чтобы он соответствовал, и он принял ответ, я не понимаю, что такое закрытое голосование имеет смысл.
abarnert

Ответы:

219

Из комментария:

Я хочу отсортировать каждый набор.

Это легко. Для любого набора 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это дает вам a list, а не a 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 в официальной документации.


* См. Комментарии для исключений.

Abarnert
источник
1
@TimothyShields: Вы правы, я должен был сказать «каждый язык программирования, который не любит злоупотреблять общепринятыми терминами». На языке, где «немодифицирующий» означает «изменяющийся», неудивительно, что это setозначает «отсортированный список», и вы должны сказать, unordered_setчтобы иметь в виду «набор»…
abarnert
2
Хорошее это имя или плохое - не обсуждается. Утверждение, что «наборы никогда не упорядочиваются ни на одном языке» неверно.
Тимоти Шилдс
5
Вы не найдете слова «неупорядоченный» на странице Википедии о математическом множестве. Вы также не найдете слова «заказанный». Это потому, что это не имеет отношения к математическим операциям над множествами. Выбор конкретного языка для упорядочивания наборов - это деталь реализации. en.wikipedia.org/wiki/Set_(mat Mathematics)
Тимоти Шилдс
3
@TimothyShields: Между тем, на странице википедии в Set (математика), которую вы связали, нет слова «неупорядоченный», потому что это уже очевидно из определения. В частности, «Множества A и B равны тогда и только тогда, когда они имеют точно такие же элементы». Это не относится к заказанным коллекциям. (Есть также такие предложения, как: «Порядок, в котором перечислены элементы набора или мультимножества, не имеет значения», поэтому, если бы вы просто искали немного иначе, вы могли бы найти его, даже не понимая концепции.)
abarnert
3
@TimothyShields: Но std::set это выставить порядок ( а не только в очевидных путей через API, функция упорядочения фактически частью типа любого заданного набора). Тот факт, что элементы всегда отсортированы в строгом слабом порядке, является частью самого определения концепции. Итак, ваш аргумент спорный. Но даже если это не так, какое это имеет значение? Почти во всех языках программирования наборы неупорядочены, как и в математике. Тот факт, что есть один отдаленный язык, который использует это слово для обозначения чего-то еще, не делает это утверждение менее верным.
abarnert