2016-04-28 21 views
4

是否可以將大寫字母順序分組?Python - 加入兩個列表對象彼此如果他們的名字大寫

例如,我有一個這樣的列表:

lst =[['John'],['is'],['smart'],[','],['John'],['Kenneddy'],['is'],['smarter'],[','],['John'],['Fitzgerald'],['Kennedy'],['is'],['best']] 

所需的輸出:

[['John'],['is'],['smart'],[','],['John','Kenneddy'],['is'],['smarter'],[','],['John','Fitzgerald','Kennedy'],['is'],['best']] 
+0

我沒有看到你的輸入和輸出之間的差別 –

+0

基本上第一個列表包含組切分的話,我想一些大寫的sequentail數組成員應該算一個 –

+0

看名字在我的輸出 –

回答

5

可以利用groupby到組通過首字母的單詞:

from itertools import groupby 

d = [['John'],['is'],['smart'],[','],['John'],['Kenneddy'],['is'],[','],['John'],['Fitzgerald'],['Kennedy'],['is'],['best']] 

sum(([[x[0] for x in g]] if k else list(g) 
    for k, g in groupby(d, key=lambda x: x[0][0].isupper())), 
    []) 
+0

非常感謝你的工作lika魅力。正是我想要的 –

+0

這是一個不錯的解決方案!但是你知道如何在Python 3下工作'list(g)' - 它會拋出'TypeError:'list'對象不可調用嗎? – MaxU

+1

@MaxU:如果你複製和粘貼解決方案,它應該在Python 3上工作,我用3.5進行了測試,並且它產生完全相同的結果。你能否檢查初始變量是否被命名爲'list'而不是其他名稱,比如我的例子中的'd'?這正是我改變變量的原始名稱的原因,因此它不會隱藏內建的'list'。 – niemmi

0

列表= [[ '約翰'],[ '是'],[ '智能'] ,[ ' '],[' 約翰 '],[' Kenneddy '],[' 是 '],[' 聰明 '],[', '],[' 約翰 '],[' 傑拉德'],[ '肯尼迪'],[ '是'],[ '最好']]

upperlist=[] 
    tmp = 0 
    for l in list: 
     if l[0][0].isupper(): 
     if tmp != 0 and list[tmp-1] != ",": 
      u =list[tmp-1]+l 
      print(u) 
      if u[0] == ',': 
       if l not in upperlist: 
       upperlist.append(l) 
      else: 

        upperlist.append(u) 
     else: 

       upperlist.append(l) 
     else: 

      upperlist.append(l) 
     tmp = tmp+1 

print(upperlist) 
+0

在這裏謝謝你的好工作,但出來的是:[['John'],['is'],['smart'],[','],['John'],['John','Kenneddy'], ['is'],['smarter'],[','],['John'],['John','Fitzgerald'],['Fitzgerald','Kennedy'],['is'], ['最好']] 。你能刪除過多的單詞嗎? –

+0

請檢查編輯 – onkar