2017-01-26 8 views
2

何らかの条件に基づいて1dリストを反復処理しながら、多次元リストを作成するにはどうすればよいですか。Pythonで多次元リストを作成するにはどうしたらいいですか?

私は「\をn」を見つける私は、たとえば、新しいリストとその作成されたリストを追加する必要がある時はいつでも私は、私はそれのようになりたい、

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

を1Dリストを反復処理しています

new_list = [[1,2,3,4],[6,7,8,9,0],[3,45,6,7,2]] 

どうすればよいですか?助けてください

def storeData(k): 
    global dataList 
    dlist = [] 
    for y in k: 
     if y != '\n': 
      dlist.append(y) 
     else: 
      break 
    return dlist 

これは私が試みたものです。

EDIT:グッド天

+0

が空のリストです。期待される結果は何ですか? –

+0

この奇妙な入力リストを生成したコードは、おそらく変更してください。後処理は間違った方法です。 – user2357112

+0

@WillemVanOnsem私は空リストを仮定しますが、OPが言うならばより良いでしょう。 – Octo

答えて

1

は(改行されてないによってグループ化)の仕事をするでしょう:

import itertools 

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

new_list = [list(x) for k,x in itertools.groupby(a,key=lambda x : x!='\n') if k] 

print(new_list) 

我々は\n

結果の発生をフィルタリングするためのキー真理値を比較します。

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
+0

groupbyの現在無視されているキー値を使用して、2回目のパスを削除することができます。 – user2357112

+0

@ user2357112が修正されました。それははるかに良い、あなたは正しい! –

0

は、ここで基本的なアプローチであります!愚かなバグ...ここに修正があります:

>>> sub = [] 
>>> final = [] 
>>> for e in a: 
...  if e == '\n': 
...   final.append(sub) 
...   sub = [] 
...  else: 
...   sub.append(e) 
... else: 
...  final.append(sub) 
... 
>>> final 
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
>>> 

他の方法もありますが、これは絶対的な方法です。

+1

OPの質問と希望の結果はあまり並んでいません。彼らは、[[1,2,3,4]、[6,7,8,9,0]、[3,45,6,7,2]] [[1,2,3,4,5] 、[6,7,8,9,0]]。あなたは、別の '\ n'を見ることなくアイテムを使い果たした場合、最終の最後にサブを追加する条件が必要です。 – Fruitspunchsamurai

+0

@Fruitspunchsamuraiはい、はい。私の間違い。 –

+0

'else'の' final.append(sub) 'はなぜですか?そして、 '...'btwはこれを実際にテストするのは面倒です... –

0

これは私が行った方法ですが、より良い解決策が必要です。 itertools.groupbyを使用して

x = 0 
output = [[]] 
for item in a: 
    if item != "\n": 
     output[x].append(item) 
    else: 
     x += 1 
     output.append([]) 

print(output) 
3

サンプルコード:

lst = [[]] 
for x in a: 
    if x != '\n': 
     lst[-1].append(x) 
    else: 
     lst.append([]) 
print(lst) 

出力:入力が与えられると

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