python陣列分組 Python列表元素分組

2021-10-13 08:27:17 字數 2178 閱讀 3025

知乎上有人問 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、編碼

2023年 3月11 黃哥修改,修改為時間複雜度為o(n)

**一:

# coding:utf-8

def group_by_element(lst):

'''by 黃哥 基本思路是先取得不同元素起始的索引值,

再按照這個索引值取切片

index =

result =

for i, _ in enumerate(lst):

if i < len(lst) - 1 and lst[i + 1] != lst[i]:

for i, item in enumerate(index):

if i < len(index) - 1:

return result

if __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-8

def group_by_element(lst):

'''by 黃哥 基本思路是先取得不同元素起始的索引值,

再按照這個索引值,用生成器分組。

index =

for i, _ in enumerate(lst):

if i < len(lst) - 1 and lst[i + 1] != lst[i]:

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-8

def 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]:

else:

return result

if __name__ == '__main__':

lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]

group = group_by_element(lst)

print group

陣列分組問題

這個問題是這個樣子滴 有乙個無序 元素個數為n n為偶數 的正整數陣列arr,要求 如何能把這個陣列分割為元素個數為n 2的兩個子陣列,並使兩個子陣列的的和最接近。我的思路是 1 把陣列拆成2個子陣列a和b 2 用a中的每個元素與b中的每個元素比較,陣列值之和的絕對值小於原來的值就交換 其實並不難,...

js實現陣列分組

有這樣乙個陣列 法國 澳大利亞 智利 紐西蘭 西班牙 加拿大 阿根廷 美國 0 國產 波多黎各 英國 比利時 德國 義大利 義大利 現在希望讓每3個分成乙個陣列,像這樣 法國 澳大利亞 智利 紐西蘭 西班牙 加拿大 阿根廷 美國 0 國產 波多黎各 英國 比利時 德國 義大利 義大利 第一種辦法 v...

陣列(list)分組 分段

對乙個list進行分組,要求控制每組中的元素個數 1.使用切片分組 lst 1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1 lst可為空,最後返回值也為空 num 3 定義每組包含的元素個數 for i in range 0,len lst num print lst i i n...