Reputation: 1332
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
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
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
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