2016-09-23 9 views
1
list = [('a5', 1), 1, ('a1', 1), 0, 0] 

2番目または3番目の要素がリストにない場合、リストの要素を3つにグループ化したい場合は、対応する場所に「なし」を追加する必要があります。Pythonのグループ化リスト要素

exepected_output = [[('a5', 1), 1,None],[('a1', 1), 0, 0]] 

これのためのpythonic方法はありますか?これに新しく、どんな提案も役に立つでしょう。

+5

第2または第3の要素が欠落しているかどうかをどのように知っていますか? – depperm

+0

ここではどのように分割[リストをチャンクに](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evene-sized-chunks) –

+0

便利な脇に - このデータはどこから*得るのですか?ネイティブ状態から探している状態にデータを戻すためのより良い方法がある可能性は非常に高いです。 –

答えて

1

あなたが望む結果を得るための唯一の方法は、リストをループして、タプルに遭遇したときに検出することです。動作するはず

例:

temp = None 
result = [] 
for item in this_list: 
    if type(item) == tuple: 
     if temp is not None: 
      while len(temp) < 3: 
       temp.append(None) 
      result.append(temp) 
     temp = [] 
    temp.append(item) 

編集:誰かが正しくコメントとして、変数リストに名前を付けていない、あなたはリスト機能に組み込まれて上書きすることでしょう。例の名前を変更しました。

+1

最後のtempは結果に追加されません。 OPが実際にあなたに良いテストケースを与えるまれなケースでは、それを使用してください!あなたが答えを投稿する前にすることをお勧めします。 :) expected_output = [[( 'a5'、1)、1、None]、[( 'a1'、1)、0、0]]アサート(結果== expected_output) –

2

ここでは、各要素のタイプを比較し、元のリストをチャンクに分割するという、他の回答とは少し異なるアプローチです。

li = [('a5', 1), 1, ('a1', 1), 0, 0] 

for i in range(0, len(li), 3): 
    if type(li[i]) is not tuple: 
     li.insert(i, None) 
    if type(li[i+1]) is not int: 
     li.insert(i+1, None) 
    if type(li[i+2]) is not int: 
     li.insert(i+2, None) 

print [li[i:i + 3] for i in range(0, len(li), 3)] 
関連する問題