Python:检查列表是否可以通过交换两个元素进行排序,只允许一个交换

时间:2016-11-16 19:48:00

标签: python python-2.7

在下面的代码中,我试图找出左侧是否有两个元素大于右侧元素,但这似乎并不适用于我的问题。有什么提示要写进一步的逻辑吗?我被困在这里。

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

1 个答案:

答案 0 :(得分:1)

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

这是一个非常天真的解决方案。尝试交换列表中的每一对,并查看是否会导致排序列表。