sammtt - 1 year ago 60
Python Question

# Going through a list and checking in Python

I'm currently looking for an algorithm to be able to go through a list such as the following one:

`[1,1,1,1,2,3,4,5,5,5,3,2]`

I want, in this example, to be able to select the first "1" as there's a duplicate next to it, and keep going through the list until finding the next number having a duplicate next to it, and then select the last number of this one (ie. "5" in this example).
Eventually, make the difference between these 2 numbers (ie. 5-1)

I have this code at the moment:

``````i=0

for i in range(len(X)):

if (X[i] == X[i+1]):
first_number = X[i]

elif (X[i] != X[i+1]):
i+=1
``````

I'd like to add a further condition to my question. Suppose you have the following list: lst=[1,1,1,1,2,3,4,5,5,5,3,3,3,3,2,2,2,4,3] In this case, I'll get the following differences according to your code = lst = [4,-2,-1] and then stops. However, I'd like "4-2" to be added to the list afterwards because "4" is followed by a number less than "4" (thus, going to the opposite direction - up - of what "2" followed "4" were following). I hope this is clear enough. Many thanks

You can use `itertools.groupby` to find groups of repeating numbers, then find the difference between the first two of those:

``````>>> import itertools
>>> lst = [1,1,1,1,2,3,4,5,5,5,3,2]
>>> duplicates = [k for k, g in itertools.groupby(lst) if len(list(g)) > 1]
>>> duplicates[1] - duplicates[0]
4
``````

Or use `duplicates[-1] - duplicates[0]` if you want the difference between the first and the last repeated number.

In the more general case, if you want the difference between all pairs of consecutive repeated numbers, you could combine that with `zip`:

``````>>> lst = [1,1,1,1,2,3,4,5,5,5,3,3,3,3,2,2,2]
>>> duplicates = [k for k, g in itertools.groupby(lst) if len(list(g)) > 1]
>>> duplicates
[1, 5, 3, 2]
>>> [x - y for x,y in zip(duplicates, duplicates[1:])]
[-4, 2, 1]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download