2017-10-15 70 views
1

我有這樣的陣列,取值序列從Python列表

a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6] 

,我想做出比7小的值的列表(看起來像以下)

b = [[3,2,5],[4,5,6,3],[4,5],[5],[4],[6]] 

所以我用下面的方法,

>>> from itertools import takewhile 
>>> a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6] 
>>>list(takewhile(lambda x: x < 7 , a)) 
[3, 2, 5] 

但我只得到第一個序列。任何人都可以幫我解決這個問題嗎? 謝謝。

回答

6
a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6] 
from itertools import groupby 
[list(g) for k, g in groupby(a, lambda x:x<7) if k] 

輸出:

[[3, 2, 5], [4, 5, 6, 3], [4, 5], [5], [4], [6]] 
3

那因爲需要時間返回元素只要條件爲真,如果不是它只是做休息,而離開函數。

你需要這樣的事情:

big_list = []. 
small_list = [] 
for number in a: 
    if number <7 : 
     small_list.append(number) 
    else: 
     if small_list: # this is for not appending empty lists 
      big_list.append(small_list) 
     small_list = []