I have this list:
mylist = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3]
The length of the list is : 38
.
I want a new list with length: 32
.
My new list will be:
new_list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
1, 1, 2, 1, 1, 1, 2, 1, 2, 3]
So, the numbers represent different counts. The first 19
elements of the mylist
are all 1
. The 20
and 21
elements are 1
and 2
. This means I had 2 counts.
I want to get rid of the 1
and keep only the 2
because I have 2 counts. The same goes to the next 1 and 2
elements and to the last 1, 2, 3
elements. There, I have a max count of 3
.
If I try something like this:
new_list = []
for idx in range(len(mylist)-1):
if mylist[idx] == 1:
if mylist[idx + 1] > mylist[idx]:
new_list.append(mylist[idx + 1])
else:
new_list.append(mylist[idx])
because I am only checking the current and next elements, I miss the last 3
.
>Solution :
Providing the first element in mylist is less than 2 then:
mylist = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3]
newlist = []
for x in mylist:
if x > 1:
newlist[-1] = x
else:
newlist.append(x)
print(newlist)