2016-11-16 2 views
2

Здесь, в нижнем коде, я пытаюсь выяснить, есть ли два элемента в левой части, которые больше правого элемента, но это, похоже, не работает для моей проблемы. Какие-нибудь намеки написать дополнительную логику? Я застрял здесь.Python: проверьте, можно ли отсортировать список, заменив два элемента, разрешен только один обмен.

swap.py

def swap(lst): 
    count = 0 
    for k in range(0, len(lst)-1): 
     if lst[k] > lst[k+1]: 
      count += 1 
    if int(count) == 2: 
     print "Swapped" 
    elif int(count) == 0: 
     print True 
    else: 
     print False 


if __name__ == "__main__": 
    swap([1,2,3,4,0]) 
    swap([6,4,2,5]) 
    swap([6,4,2,8]) 
    swap([1,4,5]) 

Мой ожидается выход из программы -

[1,4,5] will return True 
[6,4,2,8] will return Swapped 
[6,4,2,5] will return False 
+0

Что именно «обменивается»? Вы проверяете, будет ли сортировка списка двумя элементами сортировки? –

+0

yes Я просто проверяю, если поменяв только два элемента, список будет отсортирован, если да, тогда я печатаю строку «swapped» – Sanchit

+0

Должны ли они быть соседними? –

ответ

0
from itertools import combinations 
def is_swappable(lst): 
    s = sorted(lst) 
    for i, j in combinations(range(len(lst)), 2): 
     l = lst[:] 
     l[i], l[j] = l[j], l[i] 
     if l == s: 
      return True 
    return False 

Вот довольно наивным решение. Пробят, заменяя каждую пару в списке, и видит, приведет ли это к отсортированному списку.

Смежные вопросы