# Python | Counting sign change in list containing Positive and Negative Integers

• Last Updated : 21 Jun, 2019

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`

My Personal Notes arrow_drop_up