2016-11-04 14 views
1

私はこの分割特定の文字に基づいて小さいリストにリスト

input_list =[[1,2],[3,4]] 

のように見えるのリストを取得する必要が私のユースケースのために、すなわち

list_from_csv= ["","","1","2","","","3","4"] 

csvファイルからリストを持っていますだから、基本的に私は「」区切り は、私が最初に

for i in list_from_csv: 
    if i != "": 
     input_list.append(i) 
このような何かをしようとしたに基づいてリストを分けたいです

しかしこれは私に出力を与えます[1,2,3,4] これを達成するために、Pythonにトリックやコマンドがありますか?また、私はPythonには本当に新しいので、どんな助けもありがとうございます。また、私はこのために、すべての場所を見てみましたが、そのような例

+0

私は 'i ==" "'は 'i!=" "'でなければならないと思いますか?さもなければ、 'input_list'は空文字だけを含んでいますよね? – BorrajaX

+0

ああ、申し訳ありません私はそれを編集しましたが、それでも[1,2,3,4] –

答えて

4

ここitertools.groupbyでそれを行うための一つの方法だ見つけることができませんでした:

from itertools import groupby 

lst= ["","","1","2","","","3","4"] 
result = [[int(i) for i in g] for k, g in groupby(lst, lambda x: x!='') if k] 
print(result) 
# [[1, 2], [3, 4]] 

アイテムは、彼らが空の文字列であるかどうかにグループ化されていますが。空の文字列グループは、単にグループキー(False)を使用してフィルタリングされます。

+0

は、このような場合は、このケースをカバーします["" "1"、 "2 '、" 3、 "、" 4 "、" 5 "、" "] –

+0

このリストには' ''と '' 'が混在していますが、それはタイプミスかどうかわかりません –

+0

本当にありがとう –

2

使用itertools.groupby

>>> [list(map(int, s)) for empty, s in itertools.groupby(list_from_csv, lambda s: s=="") if not empty] 
[[1, 2], [3, 4]] 
0
任意 インポートモジュールを使用せず

代替ソリューション:
入力リストは、意図的にわずかに(より複雑なケースのために)複雑た

list_from_csv = ["","","1","2","3","","4","5", "", "", "6", "", "7"] 

str = [[int(n) for n in i] for i in ''.join([d if d else ' ' 
     for d in list_from_csv]).strip().split(' ') if i] 

print(str) 

出力:

[[1, 2, 3], [4, 5], [6], [7]] 
関連する問題