2017-05-24 8 views
1

2つのリストがあり、1つはネストされています。私は条件付きでこれをtxtにエクスポートしたい。それぞれの異なる文字は...すなわち "Letter、A"で始まり、そのタプルの3番目の要素が存在し、そうでなければ "、"を出力します。これまでタプルは、条件が他の値を出力する場合に要素を出力します。

var=5 

letter=['A','B','C','D','E','F','G','H'] 
nested_list=[ 
('A', 1, 0), 
('A', 2, 0), 
('B', 1, 9), 
('B', 3, 9), 
('C', 2, 0), 
('C', 4, 0), 
('C', 5, 0), 
('D', 2, 9), 
('E', 3, 0), 
('F', 3, 9)] 

マイコード:

bd="Letter," 

for i in range(0,len(nested_list)-1): 
    if nested_list[i][0]!=nested_list[i+1][0]: 
     bd+="\nLetter,%s,"%(nested_list[i][0]) 
     for j in range(0,var): 
      if nested_list[i][1]==j: 
       bd+="%s,"%nested_list[i][2] 
      else: 
       bd+="," 
    elif nested_list[i][0]==nested_list[i+1][0]: 
     bd+="\n" 
     for j in range(0,var): 
      if nested_list[i+1][1]==j: 
       bd+="%s,"%nested_list[i+1][2] 
      else: 
       bd+="," 

print bd 

電流出力:

タプルの2番目の要素は var(0〜5)との範囲内にある場合の存在の条件であります
Letter,A,,,0,,, 
Letter,A,,,0,,,B,,,,9,, 
Letter,B,,,,9,,C,,,,,0,C,,,,,, 
Letter,C,,,,,, 
Letter,D,,,9,,, 
Letter,E,,,,0,, 

期待される出力

Letter,A,0,0,,, 
Letter,B,9,,9,, 
Letter,C,,0,,0,0 
Letter,D,,9,,, 
Letter,E,,,0,, 
Letter,F,,,0,, 

お願いします。

答えて

1

あなたのリストが常に正しく注文された場合、私はこれはitertools.groupbyのための偉大なユースケースだと思う:

In [14]: from itertools import groupby 

In [15]: from operator import itemgetter 

In [16]: for k, group in groupby(nested_list, itemgetter(0)): 
    ...:  plist = ['']*5 
    ...:  for _, idx, val in group: 
    ...:   plist[idx-1] = str(val) 
    ...:  print("Letter,{},{}".format(k, ','.join(plist))) 
    ...: 
Letter,A,0,0,,, 
Letter,B,9,,9,, 
Letter,C,,0,,0,0 
Letter,D,,9,,, 
Letter,E,,,0,, 
Letter,F,,,9,, 
+0

感謝の男は、完璧に動作します! – gilgameshbk

関連する問題