I am working on identifying if the list is Isotonic or not.
I have this:
true_list = [5,4,3,1,1]
true_list1=list[::-1]
f_list = [5,4,9,1,1]
f_list1=f_list[::-1]
def isMonotonic(item):
if len(item)==1:
return True
else:
if all(item[x]<=item[x+1] for x in range(0,len(item)-1) or
item[x]>=item[x+1] for x in range(0,len(item)-1) ):
return True
else:
return False
print(true_list)
print(isMonotonic(true_list))
print(true_list1)
print(isMonotonic(true_list1))
print(f_list)
print(isMonotonic(f_list))
print(f_list1)
print(isMonotonic(f_list1))
I don’t understand why for true_list it returns False
For f_list and f_list1 : It should be False and it is False.
Please advise.
Thank You
>Solution :
This is happening because your if condition is incorrect. The all would return True if all conditions in it are True.
What you need is "(all numbers are decreasing monotonically) OR (all numbers are increasing monotonically)"
true_list = [5,4,3,1,1]
true_list1=true_list[::-1]
f_list = [5,4,9,1,1]
f_list1=f_list[::-1]
def isMonotonic(item):
if len(item)==1:
return True
else:
if (all(item[x]<=item[x+1] for x in range(0,len(item)-1)) or
all(item[x]>=item[x+1] for x in range(0,len(item)-1))) :
return True
else:
return False
print(true_list)
print(isMonotonic(true_list))
print(true_list1)
print(isMonotonic(true_list1))
print(f_list)
print(isMonotonic(f_list))
print(f_list1)
print(isMonotonic(f_list1))
outputs –
[5, 4, 3, 1, 1]
True
[1, 1, 3, 4, 5]
True
[5, 4, 9, 1, 1]
False
[1, 1, 9, 4, 5]
False