2012-05-22 141 views
1

我已經在這裏好幾天了,並嘗試了各種不同的方法,並檢查了至少50個不同的stackoverflow/python庫/ python新聞組問題,並且沒有提供了很多幫助。 (雖然我不會驚訝,如果它在外面,我錯過了它)。查找和分割列表中的字符串中的字符

ANYWAY!

我有一個列表與字符串裏面的列表。如下:

[['CAA46951&Homeobox domain&192:248&F&#CDC1C5&NULL&PFAM&Y&433&'], 
['CAA46951&Homeodomain-like&165:252&S&#CD5B45&NULL&SCOP&Y&433&'], 
['5330400P12&WD domain, G-beta repeat&131:168&F&#FF8C69&NULL&PFAM&Y&296&'], 
['5330400P12&WD domain, G-beta repeat&173:210&F&#FF8C69&NULL&PFAM&Y&296&'], 
['5330400P12&WD40-repeat&1:296&S&#00FF7F&NULL&SCOP&Y&296&'], 
['AAH62206&Cell division protein&38:311&S&#00CED1&NULL&PFAM&Y&425&'], 
['AAH62206&P-loop containing nucleoside triphosphate hydrolases&36:279&S&#00FFFF&NULL&SCOP&Y&425&']] 

欲每個字符串分割成一個單獨的串,在一個列表(所以[[ 'A', 'B', 'C'],[ 'A2', 'B2' , 'C2']排序列表,而不是[ '一& b & C']的,['a2爲& B2 & C2]

我已經試過各種從for循環枚舉,遞歸函數和我我知道這是一個真正的nooby問題,但請幫助。

(它可能值得注意的是,列表作爲txt文件傳遞並轉換到字符串列表的列表。本來這將是:

CAA46951&Homeobox domain&192:248&F&#CDC1C5&NULL&PFAM&Y&433& CAA46951&Homeodomain-like&165:252&S&#CD5B45&NULL&SCOP&Y&433&

回答

1
LofL=[['CAA46951&Homeobox domain&192:248&F&#CDC1C5&NULL&PFAM&Y&433&'], 
     ['CAA46951&Homeodomain-like&165:252&S&#CD5B45&NULL&SCOP&Y&433&'], 
     ['5330400P12&WD domain, G-beta repeat&131:168&F&#FF8C69&NULL&PFAM&Y&296&'], 
     ['5330400P12&WD domain, G-beta repeat&173:210&F&#FF8C69&NULL&PFAM&Y&296&'], 
     ['5330400P12&WD40-repeat&1:296&S&#00FF7F&NULL&SCOP&Y&296&'], 
     ['AAH62206&Cell division protein&38:311&S&#00CED1&NULL&PFAM&Y&425&'], 
     ['AAH62206&P-loop containing nucleoside triphosphate hydrolases&36:279&S&#00FFFF&NULL&SCOP&Y&425&']] 

newL=[]  
for L in LofL: 
    newSubL=[] 
    for e in L: 
     for s in e.split('&'): 
      if s: 
       newSubL.append(s) 
    newL.append(newSubL) 

輸出:

[['CAA46951', 'Homeobox domain', '192:248', 'F', '#CDC1C5', 'NULL', 'PFAM', 'Y', '433'], ['CAA46951', 'Homeodomain-like', '165:252', 'S', '#CD5B45', 'NULL', 'SCOP', 'Y', '433'], ['5330400P12', 'WD domain, G-beta repeat', '131:168', 'F', '#FF8C69', 'NULL', 'PFAM', 'Y', '296'], ['5330400P12', 'WD domain, G-beta repeat', '173:210', 'F', '#FF8C69', 'NULL', 'PFAM', 'Y', '296'], ['5330400P12', 'WD40-repeat', '1:296', 'S', '#00FF7F', 'NULL', 'SCOP', 'Y', '296'], ['AAH62206', 'Cell division protein', '38:311', 'S', '#00CED1', 'NULL', 'PFAM', 'Y', '425'], ['AAH62206', 'P-loop containing nucleoside triphosphate hydrolases', '36:279', 'S', '#00FFFF', 'NULL', 'SCOP', 'Y', '425']] 

如果您想進一步減少,你可以這樣做:

newL=[filter(len, e.split('&')) for l in LofL for e in l] 
+1

我想嫁給你!這正是我一直試圖解決這個問題近兩週的時間,並且它不起作用!但你讓它工作!謝謝! –

+1

@Paul Circi Tnisq:你可以接受答案並將它投票,我們將其稱爲方塊; - } – dawg

+1

你可以將主體改爲'newSubL = filter(None,e.split('&'))' –

1
>>> oldList = [['a&b&c'], ['d&e&f']] 
>>> newList = [item[0].split('&') for item in oldList] 
>>> newList 
[['a', 'b', 'c'], ['d', 'e', 'f']] 
+0

我有點需要它們在編碼後面的字符串列表中(更方便而不是任何東西) 這也只是返回每個項目的第一個元素,但我認爲我可以使它工作。謝謝! –

+0

@PaulCirciTnisq:它將返回主列表中每個列表的內容。您的主列表中的每個列表是否包含多個字符串? –

+0

不,但它返回主列表中每個列表中的每個單獨的字符 –