2017-06-07 2 views
0

文字列中の行のリストをリストのリストに変換したい。文字列の行のリストをリストのリストに変換する方法(行の各項目が削除されている)

次のような作品がありますが、これを行うためのより洗練された方法があると思われます。

def str_to_lst_of_lsts(s): 
    lst = s.splitlines()[1:] 
    lst2 = [i.split(';') for i in lst] 
    lst3 = [] 
    for i in lst2: 
     i2 = [j.strip() for j in i] 
     lst3.append(i2) 
    return lst3 

s = ''' 
c; German for dog; Hund 
c; capital of France; Paris 
c; company; IBM 
c; nation; Sweden 
c; nickname for James; Jim 
''' 

print(str_to_lst_of_lsts(s)) 

# [['c', 'German for dog', 'Hund'], ['c', 'capital of France', 'Paris'], ['c', 'company', 'IBM'], ['c', 'nation', 'Sweden'], ['c', 'nickname for James', 'Jim']] 

答えて

0

あなたはこれも動作します

def str_to_lst_of_lsts(s): 
    return [ 
     [part.strip() for part in line.split(';')] 
     for line in s.splitlines()[1:] 
    ] 
+0

さらに優れています。 –

1

主なステップは、ループの代わりに、リストの内包表記を使用することです:

lst3 = [[j.strip() for j in i] for i in lst2] 

はい、あなたはネストリストの内包表記をすることができます。今あなたが1行の解決法を主張するならば、前の2つの補題をこれに置き換えることができます。

コーディングスタイル:しないでください。 :-)

+0

ネストされたリストの内包表記は、 - それを得ました。エレガント。 –

+0

優雅ですが、あなたがそれをするときは、それを可読にしておいてください。テンポラリ変数の良い名前が役に立ちます。 – Prune

0

ネストされた文字列の理解を使用することができます -

p = s.split("\n") 
l = [x.split(";") for x in p if x != ""] 
print l 
>>> [['c', ' German for dog', ' Hund'], ['c', ' capital of France', ' Paris'], ['c', ' company', ' IBM'], ['c', ' nation', ' Sweden'], ['c', ' nickname for James', ' Jim']] 
関連する問題