盤點(diǎn)一個(gè)Python處理的基礎(chǔ)題目
大家好,我是皮皮。
一、前言
前幾天在Python最強(qiáng)王者交流群【Chloe】問了一道Python處理的問題,如下圖所示。

原始數(shù)據(jù)如下:
origin_lst?=?[0,?0,?1,?2,?3,?4,?4,?5,?6,?6,?6,?7,?8,?9,?4,?4]
期望得到的結(jié)果是:
[0,?1,?2,?3,?4,?5,?6,?7,?8,?9,?4]
二、實(shí)現(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)
運(yùn)行之后,得到的結(jié)果可以滿足預(yù)期,如下圖所示:

方法二
后來【瑜亮老師】也給了一份代碼,使用列表推導(dǎo)式,如下所示:
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)
運(yùn)行結(jié)果如下圖所示:

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

方法三
后來在【Siris】給了一個(gè)基礎(chǔ)的方法,如下所示:
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)
運(yùn)行結(jié)果如下圖所示:

方法四
后來在【Siris】還給了一個(gè)生成器的方法,如下所示:
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)
運(yùn)行結(jié)果如下所示:

方法五
后來【Chloe】自己也給了一個(gè)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)
運(yùn)行結(jié)果如下圖所示:

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