1

私はこれに数日間参加し、あらゆる種類の異なる方法を試し、少なくとも50の異なるstackoverflow /pythonライブラリ/pythonニュースグループの質問をチェックしましたが、どれも多くの助けを提供していません。(それがそこにあり、私がそれを逃したとしても、私は驚かないでしょうが)。

とりあえず!

文字列を含むリストのリストがあります。次のように:

[['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&']]

各文字列を1つのリストで個別の文字列に分割したい(つまり、[['a'、'b'、'c']、['a2'、'b2'、'c2']]のようなリスト[['a&b&c']、['a2&b2&c2]]の

forループを使用した列挙から再帰関数まで、すべてを試しましたが、機能させることができません。私はこれが本当におかしな質問であることを知っていますが、助けてください。

(リストがtxt。ファイルとして渡され、文字列のリストのリストに変換されることに注意してください。元々は次のようになります。

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

4

2 に答える 2

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] 
于 2012-05-22T06:18:16.017 に答える
1
>>> oldList = [['a&b&c'], ['d&e&f']]
>>> newList = [item[0].split('&') for item in oldList]
>>> newList
[['a', 'b', 'c'], ['d', 'e', 'f']]
于 2012-05-22T05:57:05.190 に答える