Issue
This Content is from Stack Overflow. Question asked by Maryam
I have a list and I want to get one element from two similar consecutive elements. (sort
or if is not in new_list
doesn’t work as I want to keep those similar elements that are not consecutive)
I’ve written this, but it returns an error with the range function that [i+1] is not in the range:
like: input: [‘a’,’b’,’b’,’c’,’c’,’a’]
output: [‘a’,’b’,’c’,’a’]
list = ['a','b','b','c','c','a']
new_list = []
for i in range(0,len(list)+1):
if list[i]!=list[i+1]:
new_list.append(char[i])
i=i+1
print (new_list)
Solution
There’s a couple of issues here (indexing issues, using list
as a variable name which shadows a builtin), but the simplest way to do this is to use itertools.groupby()
:
from itertools import groupby
lst = ['a','b','b','c','c','a']
print([key for key, _ in groupby(lst)])
If you can’t use groupby(), you can check whether you’ve already added the first letter in the current streak of letters (i.e. check if the last item in your accumulated result matches the letter you’re currently examining):
lst = ['a','b','b','c','c','a']
result = []
for item in lst:
if not result or item != result[-1]:
result.append(item)
print(result)
These output:
['a', 'b', 'c', 'a']
This Question was asked in StackOverflow by Maryam and Answered by BrokenBenchmark It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.