# Python | Increment 1’s in list based on pattern

• Last Updated : 30 Jul, 2019

Given a list of binary numbers 0 and 1, Write a Python program to transform the list in such a way that whenever 1 appears after the occurrence of a sequence of 0’s, increment it by n+1, where ‘n’ is the last increment.

Examples:

```Input : [0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1]
Output : [0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 3, 3]

Input : [1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]
Output : [1, 0, 2, 0, 0, 0, 3, 3, 0, 0, 4, 4, 4, 0, 5, 0, 6]
```

Approach #1 : Naive Approach

This is a naive approach to the given problem. It uses two variable ‘previous’ and ‘grp’ to store previously incremented number and to store the number of 1’s in a group. Now, using a for loop, increment 1’s accordingly.

 `# Python3 program to increment 1's in  ` `# list based on pattern  ` ` `  `def` `transform(lst): ` `     `  `    ``previous ``=` `0` `    ``grp ``=` `0` `    ``for` `elem ``in` `lst: ` `        ``if` `elem ``and` `not` `previous: ` `             ``grp ``+``=` `1` `        ``previous ``=` `elem ` `        ``yield` `(grp ``if` `elem ``else` `0``) ` `     `  `# Driver code ` `lst ``=` `[``0``, ``1``, ``0``, ``0``, ``1``, ``1``, ``0``, ``0``, ``0``, ``1``, ``1``, ``1``] ` `x ``=` `(transform(lst)) ` `res ``=` `[] ` `for` `i ``in` `range``(``0``, ``len``(lst)): ` `    ``res.append(``next``(x)) ` `print``(res) `

Output:

```[0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 3, 3]
```

Approach #2 : Using count, chain and groupby from itertools module.
This is an efficient and more pythonic approach towards the given problem where we use count, chain and groupby from itertools module.

 `# Python3 program to increment 1's in  ` `# list based on pattern  ` `from` `itertools ``import` `*`  ` `  `def` `transform(lst): ` `     `  `    ``c ``=` `count(``1``) ` `    ``return` `list``(chain(``*``[``list``(g) ``if` `k !``=` `1` `else` `[``next``(c)]``*``len``(``list``(g))  ` `    ``for` `k, g ``in` `groupby(lst)])) ` `     `  `# Driver code ` `lst ``=` `[``0``, ``1``, ``0``, ``0``, ``1``, ``1``, ``0``, ``0``, ``0``, ``1``, ``1``, ``1``] ` `print``(transform(lst)) `

Output:

```[0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 3, 3]
```

My Personal Notes arrow_drop_up
Recommended Articles
Page :