最近研究了一下 CodeWars 这个网站,这是国外一个刷编程题的网站,质量很高,打算后面有>时间去这里面刷一下题,哪怕不会,看看大佬们是如何做题的也好。
今天做了一道题:unique in order
- 题目
"""
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):
pre_item = None
result = []
for item in iterable:
if item != pre_item: # 将得到的数值 item 与开始定义的变量 pre_item 进行判断
result.append(item) # 不相等则加入到列表中
pre_item = item # 重点:此时将该数值赋值给 pre_item,那么在下次判断时就是与上次的值进行判断,达到相邻去重的效果。
return result
print(unique_in_order('AAAABBBCCDAABBB'))
print(unique_in_order('ABBCcAD'))
print(unique_in_order([1, 2, 2, 3, 3]))
print(unique_in_order([]))
- 解决
这道题想了半天也没有做出来,最后参考了大佬们的代码实现了功能。
完整代码已经上传 GitHub