Programming Noob
Programming Noob

Reputation: 1332

Picking repeated adjacent numbers in a list

I want to enter a group of numbers, and my output to be a list of the numbers that are repeated more than once, side by side.

Example input: 1,1,2,2,1,1,1,3,4,5,5,-1,-1,-1,3,4,3

Wanted output: [1,2,1,5,-1]

My code:

countnumbers = []
numbers = input().split(',')

for i in range(len(numbers)):
    numbers[i] = int(numbers[i])

sizeoflist = len(numbers)
  
for i in range(sizeoflist - 1):
    if numbers[i] == numbers[i + 1]:
        countnumbers.append(numbers[i])
                
mylist = str(countnumbers).replace(' ','')
print(mylist)

Example for what my code generates:

Input: 1,1,1,2,2,1,1,1

Output: [1,1,2,1,1]

So I'm just struggling in how to make it [1,2,1]. I know my code is faulty, I tried using the count function, to count but didn't work for me. And please without the def calling function.

Upvotes: 0

Views: 85

Answers (3)

cards
cards

Reputation: 4986

You can use groupby from itertools and filter each group by length. The gid stands for for group id.

import itertools as it

lst = [1,1,2,2,1,1,1,3,4,5,5,-1,-1,-1,3,4,3]

out = [gid for gid, grp in it.groupby(lst) if len(tuple(grp)) > 1]

Upvotes: 0

Anupam khurana
Anupam khurana

Reputation: 33

countnumbers = []
numbers = input().split(',')

for i in range(len(numbers)):
    numbers[i] = int(numbers[i])

sizeoflist = len(numbers)
  
for i in range(sizeoflist - 1):
    if numbers[i] == numbers[i + 1]:
        if len(countnumbers)==0 or not numbers[i] == countnumbers[-1]:
            countnumbers.append(numbers[i])
                
mylist = str(countnumbers).replace(' ','')
print(mylist)

Another way of doing it in a little less lines

Upvotes: 0

ahmed
ahmed

Reputation: 5590

Add a way to remember last known number:

countnumbers = []
numbers = input().split(',')

for i in range(len(numbers)):
    numbers[i] = int(numbers[i])

sizeoflist = len(numbers)

current = None
for i in range(sizeoflist - 1):
    if numbers[i] == numbers[i + 1]:
        if current is None:
            current = numbers[i]
            countnumbers.append(numbers[i])
    else:
        current = None

mylist = str(countnumbers).replace(' ','')
print(mylist)

notice how i used current variable

Upvotes: 1

Related Questions