回答編集履歴
2
関数名が適当でないと思った。けどほかに良いのも思いつかなかった
    
        answer	
    CHANGED
    
    | 
         @@ -38,7 +38,7 @@ 
     | 
|
| 
       38 
38 
     | 
    
         
             
                     [16,15,14,13],
         
     | 
| 
       39 
39 
     | 
    
         
             
                     [9,10,0,12]]
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
            def  
     | 
| 
      
 41 
     | 
    
         
            +
            def f(data):
         
     | 
| 
       42 
42 
     | 
    
         
             
                result = []
         
     | 
| 
       43 
43 
     | 
    
         
             
                for col in zip(*data):
         
     | 
| 
       44 
44 
     | 
    
         
             
                    if sum(col) == 34:
         
     | 
| 
         @@ -56,8 +56,8 @@ 
     | 
|
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                return list(map(list, zip(*result)))
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
            print( 
     | 
| 
      
 59 
     | 
    
         
            +
            print(f(data1))
         
     | 
| 
       60 
     | 
    
         
            -
            print( 
     | 
| 
      
 60 
     | 
    
         
            +
            print(f(data2))
         
     | 
| 
       61 
61 
     | 
    
         
             
            """ =>
         
     | 
| 
       62 
62 
     | 
    
         
             
            [[8, 7, 6, 5], [1, 2, 3, 4], [16, 15, 14, 13], [9, 10, 11, 12]]
         
     | 
| 
       63 
63 
     | 
    
         
             
            [[8, 7, 6, 5], [1, 2, 11, 4], [16, 15, 14, 13], [9, 10, 3, 12]]
         
     | 
1
追記
    
        answer	
    CHANGED
    
    | 
         @@ -22,4 +22,44 @@ 
     | 
|
| 
       22 
22 
     | 
    
         
             
            ```
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            zipでlistを転置する方法を利用しています。参考:
         
     | 
| 
       25 
     | 
    
         
            -
            [Python標準で転置行列](https://qiita.com/mas9612/items/821fbb4c881b7a836451)
         
     | 
| 
      
 25 
     | 
    
         
            +
            [Python標準で転置行列](https://qiita.com/mas9612/items/821fbb4c881b7a836451)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### 追記
         
     | 
| 
      
 28 
     | 
    
         
            +
            作ってみました。上のコードを多少書き換えただけ。ヘンなデータが入ってきたときのことはまったく考えていません。
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ```python
         
     | 
| 
      
 31 
     | 
    
         
            +
            data1 = [[8,7,6,5],
         
     | 
| 
      
 32 
     | 
    
         
            +
                     [1,0,3,4],
         
     | 
| 
      
 33 
     | 
    
         
            +
                     [16,15,14,13],
         
     | 
| 
      
 34 
     | 
    
         
            +
                     [9,10,0,12]]
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            data2 = [[8,7,6,5],
         
     | 
| 
      
 37 
     | 
    
         
            +
                     [1,2,0,4],
         
     | 
| 
      
 38 
     | 
    
         
            +
                     [16,15,14,13],
         
     | 
| 
      
 39 
     | 
    
         
            +
                     [9,10,0,12]]
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            def fillz(data):
         
     | 
| 
      
 42 
     | 
    
         
            +
                result = []
         
     | 
| 
      
 43 
     | 
    
         
            +
                for col in zip(*data):
         
     | 
| 
      
 44 
     | 
    
         
            +
                    if sum(col) == 34:
         
     | 
| 
      
 45 
     | 
    
         
            +
                        result.append(col)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 47 
     | 
    
         
            +
                        if col.count(0) == 1:
         
     | 
| 
      
 48 
     | 
    
         
            +
                            # 一列に0が1つのとき
         
     | 
| 
      
 49 
     | 
    
         
            +
                            tmp = list(col)
         
     | 
| 
      
 50 
     | 
    
         
            +
                            tmp[tmp.index(0)] = 34 - sum(col)
         
     | 
| 
      
 51 
     | 
    
         
            +
                            result.append(tmp)
         
     | 
| 
      
 52 
     | 
    
         
            +
                        else:
         
     | 
| 
      
 53 
     | 
    
         
            +
                            # 一列に2つあるとき
         
     | 
| 
      
 54 
     | 
    
         
            +
                            fillvals = [i for i in range(1, 17) if i not in sum(data, [])]
         
     | 
| 
      
 55 
     | 
    
         
            +
                            result.append([fillvals.pop() if e == 0 else e for e in col])
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                return list(map(list, zip(*result)))
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            print(fillz(data1))
         
     | 
| 
      
 60 
     | 
    
         
            +
            print(fillz(data2))
         
     | 
| 
      
 61 
     | 
    
         
            +
            """ =>
         
     | 
| 
      
 62 
     | 
    
         
            +
            [[8, 7, 6, 5], [1, 2, 3, 4], [16, 15, 14, 13], [9, 10, 11, 12]]
         
     | 
| 
      
 63 
     | 
    
         
            +
            [[8, 7, 6, 5], [1, 2, 11, 4], [16, 15, 14, 13], [9, 10, 3, 12]]
         
     | 
| 
      
 64 
     | 
    
         
            +
            """
         
     | 
| 
      
 65 
     | 
    
         
            +
            ```
         
     |