Python列表元素分組
知乎上有人問 Python中的列表按相同元素分割?
比如列表[0,0,0,1,1,2,3,3,3,2,3,3,0,0]分割成[0,0,0],[1,1],[2],[3,3,3],[2],[3,3],[0,0]
如何解決這樣的問題呢?
1、首先說明,如果這樣的題目都不能寫出代碼,原因在基本的循環判斷沒有搞清楚。2、黃哥在如何訓練自己的編程思路 文章所說的,做習題,要像開發項目的流程一樣
(需求->需求分析->設計->編碼->測試->交付等),拿到一個習題,還沒有進行分析,就匆匆忙忙敲代碼,這個學習方法,是不好的學習方法。3、如果做這個習題,看黃哥的講解,先要分析,分析看出是按照相鄰元素是不是相同來分組。
設計解決方法,大問題化解為小問題,先化解為找出元素不相同的那個元素的索引,有這個索引後,再進行分組。4、編碼
代碼一:
# coding:utf-8def group_by_element(lst): by 黃哥 基本思路是先取得不同元素起始的索引值, 再按照這個索引值取切片 index = [] result = [] for i, _ in enumerate(lst): if i < len(lst) - 1 and lst[i + 1] != lst[i]: index.append(i + 1) result.append(lst[:index[0]]) for i, item in enumerate(index): if i < len(index) - 1: result.append(lst[index[i]:index[i + 1]]) result.append(lst[item:]) return resultif __name__ == __main__: lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0] group = group_by_element(lst) print group
代碼二:
# coding:utf-8def group_by_element(lst): by 黃哥 基本思路是先取得不同元素起始的索引值, 再按照這個索引值,用生成器分組。 index = [] for i, _ in enumerate(lst): if i < len(lst) - 1 and lst[i + 1] != lst[i]: index.append(i + 1) def take(lst, n): for i in range(n): yield next(lst) if not hasattr(lst, next): lst = iter(lst) begin = 0 for item in index: x = list(take(lst, item - begin )) begin = item yield x yield list(lst)if __name__ == __main__: lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0] group = group_by_element(lst) print list(group)
思路三:
基本思路用一個二維list [[]], 遍歷list,判斷前後元素是不是相等,如果相等添加到result[-1],如果不相等,需要添加一個空[]。# coding:utf-8def group_by_element(lst): by 黃哥 基本思路用一個二維list [[]], 遍歷list 判斷前後元素是不是相等,如果相等添加到result[-1],如果 不相等,需要添加一個空[] result = [[]] length = len(lst) for i in range(length): if i < length - 1: if lst[i] == lst[i + 1]: result[-1].append(lst[i]) else: result[-1].append(lst[i]) result.append([]) result[-1].append(lst[i]) return resultif __name__ == __main__: lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0] group = group_by_element(lst) print group
216小時學會Python
點擊黃哥python培訓試看視頻播放地址
推薦閱讀:
※第四章 文本和位元組序列
※python主要用於什麼開發?
※Python騷操作 | 用python爆破某會員網站
※全棧 - 9 實戰 爬取豆瓣電影數據
※樹莓派Raspberry區域網視頻小車教程
TAG:Python |