在下面的代码中,我试图找出左侧是否有两个元素大于右侧元素,但这似乎并不适用于我的问题。有什么提示要写进一步的逻辑吗?我被困在这里。
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 :(得分: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
这是一个非常天真的解决方案。尝试交换列表中的每一对,并查看是否会导致排序列表。