盤點一個Python處理的基礎題目
大家好,我是皮皮。
一、前言
前幾天在Python最強王者交流群【Chloe】問了一道Python處理的問題,如下圖所示。

原始數(shù)據(jù)如下:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
期望得到的結果是:
[0,?1,?2,?3,?4,?5,?6,?7,?8,?9,?4]
二、實現(xiàn)過程
方法一
這里【老松鼠】給了一份代碼,如下所示:
import?itertools
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
final_lst?=?[x[0]?for?x?in?itertools.groupby(origin_lst)]
#?final_lst?=?[k?for?k,?g?in?itertools.groupby(origin_lst)]
print(final_lst)
運行之后,得到的結果可以滿足預期,如下圖所示:

方法二
后來【瑜亮老師】也給了一份代碼,使用列表推導式,如下所示:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
res?=?[origin_lst[i]?for?i?in?range(len(origin_lst))?if?i?==?0?or?origin_lst[i]?!=?origin_lst[i?-?1]]
print(res)
運行結果如下圖所示:

順利的幫助粉絲解決了問題。

方法三
后來在【Siris】給了一個基礎的方法,如下所示:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
result?=?[origin_lst[0]]
for?i?in?range(1,?len(origin_lst)):
????if?origin_lst[i]?!=?origin_lst[i-1]:
????????result.append(origin_lst[i])
print(result)
運行結果如下圖所示:

方法四
后來在【Siris】還給了一個生成器的方法,如下所示:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
def?del_adjacent(iterable):
????prev?=?object()
????for?item?in?iterable:
????????if?item?!=?prev:
????????????prev?=?item
????????????yield?item
result?=?list(del_adjacent(origin_lst))
print(result)
運行結果如下所示:

方法五
后來【Chloe】自己也給了一個enumerate方法,代碼如下所示:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
lst_final?=?[]
for?index,?val?in?enumerate(origin_lst):
????if?val?!=?origin_lst[index?-?1]:
????????lst_final.append(val)
print(lst_final)
運行結果如下圖所示:

條條大路通羅馬,方法還是很多的!
三、總結
大家好,我是皮皮。這篇文章主要盤點了一道使用Python處理數(shù)據(jù)的問題,文中針對該問題給出了具體的解析和代碼實現(xiàn),一共兩個方法,幫助粉絲順利解決了問題。
最后感謝粉絲【Chloe】提問,感謝【月神】、【瑜亮老師】、【老松鼠】給出的思路和代碼解析,感謝【dcpeng】、【馮誠】、【艾希·覺羅】等人參與學習交流。
評論
圖片
表情
