#python #sorting #python-2.7
#python #сортировка #python-2.7
Вопрос:
Я получаю кучу кортежей с 5 числами от 0 до 9. Я хочу проверить, отсортирован ли кортеж в порядке возрастания или убывания (т.е. 12345 02455 97311). Как это можно сделать?
Ответ №1:
Попробуйте это
if some_tuple == tuple(sorted(some_tuple, reverse=True)):
# Order is Descending
elif some_tuple == tuple(sorted(some_tuple)):
# Order is Ascending
else:
# No order
Комментарии:
1. Просто не забудьте привести кортеж к списку!
2. @jd1215 извините, я на самом деле тестировал со списком, как вы можете видеть отредактированный ответ 🙂 Спасибо за отзыв, сейчас обновлю ответ…
3. @jd1215: пока не были добавлены
tuple()
вызовы, этот код не мог бы у вас работать .4. @MartijnPieters Да, это верно, но идея действительно имеет смысл
Ответ №2:
Давайте оставим это простым и глупым.
# Returns 1 if ascending, -1 if descending and 0 if no order
def check_sorted(t):
assert len(t) >= 2
ascending = t[1] > t[0]
norm = lambda d : d if ascending else -d
for i in range(2, len(t)):
if norm(t[i] - t[i-1]) < 0:
return 0
return 1 if ascending else -1
Комментарии:
1. Вы могли бы это сделать
range(2, len(t))
.2. В этом случае простое и глупое также более эффективно. Это O (N) решение против O(NlogN) для сортировки.
Ответ №3:
Самая простая проверка — это:
ascending = x[0] < x[-1]
Это сработает, только если вы знаете, что:
- элементы расположены в том или ином порядке (т.е. не (1,3,2))
- существует как минимум два элемента
- не все элементы имеют одинаковое значение
Ответ №4:
Это сделает свое дело:
def which_order(t):
if tuple(sorted(t)) == t:
return 'ascending'
if tuple(sorted(t, reverse=True)) == t:
return 'descending'
return 'out-of-order'
Комментарии:
1. Они не хотят знать, находится ли это в любом порядке, они хотят определить, в каком порядке это находится.
2. Хорошо, я думаю, я понял.
3. это то, чего я хочу! Спасибо