2012-11-16 43 views
1

我有一個列表:如何將列表分成更小的列表?

lists = (['1','2','3','S','3','4','S','4','6','7']) 

而且我想進入S較小的列表,每次「S」出現分裂的列表,並消除「S」成類似:

([['1','2','3'],['3','4],['4','6','7']]) 

我的代碼:

def x (lists): 
    empty = '' 
    list = [] 

    for x in lists: 
     if x == empty: 
      list[-1:].append(x) 
     else: 
      list.append([x]) 

    return (list) 

我嘗試過這樣的事情,但我對Python非常陌生,而且我無處可去。請不要幻想,我將如何解決我的問題?

回答

1

也許像map(list,''.join(lists).split('S'))

或者,[list(s) for s in ''.join(lists).split('S'))

5

嘗試itertools.groupby()

>>> from itertools import groupby 
>>> lists = ['1','2','3','S','3','4','S','4','6','7'] 
>>> [list(g[1]) for g in groupby(lists, lambda i:i!='S') if g[0]] 
[['1', '2', '3'], ['3', '4'], ['4', '6', '7']] 
+0

嗨,謝謝你的幫助!然而,這個答案是有效的,是否有修復我擁有的?我不認爲我有那麼遠,我寧願堅持我現在所瞭解的,因爲我很新! – user1828072

+0

'groupby()'是這裏的關鍵。您可能需要閱讀python文檔。 – kev

+0

@ user1828072「解決你已有的問題」是你的方法是。 。 。好吧,不特別pythonic。這並不是說(最終的結果)你的方法是不正確的,只是不太可取,可能效率較低。 – jpm

1

嗯,可能是有趣的,但這應該工作:

[s.split('#') for s in '#'.join(lists).split('#S#')] 

相反的'#'如果不可能出現在lists中,則可以使用任何字符。