简体   繁体   中英

Equal Less and Greater List python

Hi guys I'm trying to figure out how to compare the previous number with the current one until the last digit.

this is the list:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7]

I need on each sequence of iteration the highest number (eg in the first one it's 10). After the sequence is finalized it again begins counting from the beginning (1,2,3,4..etc) until a condition is reached.

Now the problem is that I get the result correctly all until the very last iteration, the max number should be in the 7 (as you can see: 1,2,3,4,5,6,7)

but the algorithm skips it. I tried with zip function even with iter loop the same issue.

example codes that yield the same results are the following:



def printElements(arr, n): 
      
    # Traverse array from index 1 to n-2 
    # and check for the given condition 
    for i in range(1, n - 1, 1): 
        if (arr[i] > arr[i - 1] and 
            arr[i] > arr[i + 1]): 
            print(arr[i], end = " ") 
  
# Driver Code 
if __name__ == '__main__': 
    arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7]
    n = len(arr) 
  
    printElements(arr, n) 


print(count_shelf)
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7]

for prev, current in zip(arr, arr[1:]):
    print(prev,current)
    if prev > current:
        x = prev
        print(prev,'prev greater')
        print(current,'current')

results of the last alg:

2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 1
10 prev greater
1 current
1 2
2 3
3 4
4 5
5 6
6 1
6 prev greater
1 current
1 2
2 3
3 4
4 5
5 6
6 7
7 1
7 prev greater
1 current
1 2
2 3
3 1
3 prev greater
1 current
1 2
2 3
3 4
4 5
5 1
5 prev greater
1 current
1 2
2 3
3 4
4 1
4 prev greater
1 current
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 1
8 prev greater
1 current
1 2
2 3
3 4
4 5
5 6
6 7 ``
arr.append(float('-inf'))
def printElements(arr, n): 
      
    # Traverse array from index 1 to n-2 
    # and check for the given condition 
    for i in range(1, n - 1, 1): 
        if (arr[i] > arr[i - 1] and 
            arr[i] > arr[i + 1]): 
            print(arr[i], end = " ") 
  
# Driver Code 
if __name__ == '__main__': 
    arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7]
    arr.append(float('-inf'))
    n = len(arr) 
  
    printElements(arr, n) 

You can use list comprehension to get the maximum value for each sequence.

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7]

maxvals = [lst[x] for x in range(len(lst)) if x == len(lst)-1 or lst[x] > lst[x+1]]

print(maxvals)

Output

[10, 6, 7, 3, 5, 4, 8, 7]

I don't see any way to use zip to find the solution.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM