thanks a lot for codewar
Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
For example:
unique_in_order('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
unique_in_order('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D']
unique_in_order([1,2,2,3,3]) == [1,2,3]
我的解决方案
def unique_in_order(iterable):
temp=[]
prev=None
for i in iterable:
if i!=prev:
temp.append(i)
prev=i
return temp
看个别人的,这个真的是太巧妙了。
def unique_in_order(iterable):
res = []
for item in iterable:
if len(res) == 0 or item != res[-1]:
res.append(item)
return res
非常让人赞叹的思路。
再看一个
unique_in_order = lambda l: [z for i, z in enumerate(l) if i == 0 or l[i - 1] != z]
还有一个
def unique_in_order(iterable):
r = []
for x in iterable:
x in r[-1:] or r.append(x)
return r