Проверка порядка в кортеже

#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. это то, чего я хочу! Спасибо