Python | Counting sign change in list containing Positive and Negative Integers
Given a list containing Positive and Negative integers, We have to find number of times the sign(Positive or Negative) changes in the list.
Input: [-1, 2, 3, -4, 5, -6, 7, 8, -9, 10, -11, 12] Output:9 Explanation : Sign change from -1 to 2, ans = 1 Sign change from 3 to -4, ans = 2 Sign change from -4 to 5, ans = 3 Sign change from 5 to -6, ans = 4 Sign change from -6 to 7, ans = 5 Sign change from 8 to -9, ans = 6 Sign change from -9 to 10, ans = 7 Sign change from 10 to -11 ans = 8 Sign change from -11 to 12, ans = 9 Input: [-1, 2, 3, -4, 5, -11, 12] Output:5 Explanation : Sign change from -1 to 2, ans = 1 Sign change from 3 to -4, ans = 2 Sign change from -4 to 5, ans = 3 Sign change from 5 to -11, ans = 4 Sign change from -11 to 12, ans = 5
Let’s discuss certain ways in which this task is performed.
Method #1: Using Iteration
Using Iteration to find number of time sign changes in the list.
# Python Code to find number of # time sign changes in the list. # Input list Initialization Input = [ - 1 , 2 , 3 , - 4 , 5 , - 6 , 7 , 8 , - 9 , 10 , - 11 , 12 ] # Variable Initialization prev = Input [ 0 ] ans = 0 # Using Iteration for elem in Input : if elem = = 0 : sign = - 1 else : sign = elem / abs (elem) if sign = = - prev: ans = ans + 1 prev = sign # Printing answer print (ans) |
Output :
9
Method #2: Using Itertools and groupby
This is yet another way to perform this particular task using itertools.
# Python Code to find number of # time sign changes in the list. # Input list Initialization Input = [ - 1 , 2 , 3 , - 4 , 5 , - 6 , 7 , 8 , - 9 , 10 , - 11 , 12 ] # Importing import itertools # Using groupby Output = len ( list (itertools.groupby( Input , lambda Input : Input > 0 ))) Output = Output - 1 # Printing output print (Output) |
Output :
9
Method #3: Using Zip
The most concise and readable way to find number of time sign changes in the list is using zip.
# Python Code to find number of # time sign changes in the list. # Using zip to check def check( Input ): Input = [ - 1 if not x else x for x in Input ] # zip with leading 1, so that opening negative value is # treated as sign change return sum ((x ^ y)< 0 for x, y in zip ([ 1 ] + Input , Input )) # Input list Initialization Input = [ - 1 , 2 , 3 , - 4 , 5 , - 6 , 7 , 8 , - 9 , 10 , - 11 , 12 ] Output = check( Input ) Output = Output - 1 # Printing output print (Output) |
Output :
9