Advertisement
csat2148

Untitled

Dec 14th, 2019
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1.  
  2. from typing import Iterable
  3.  
  4. class Helper:
  5.  
  6.     @staticmethod
  7.     def flatten(items, useValues=True):
  8.         """Yield items from any nested iterable; see Reference."""
  9.         for x in items:
  10.             if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
  11.                 for sub_x in Helper.flatten(x.values() if isinstance(x, dict) and useValues else x):
  12.                     yield sub_x
  13.             else:
  14.                 yield x
  15.  
  16.     @staticmethod
  17.     def lio(cl, *inst):
  18.         inst=list(Helper.flatten(inst))
  19.         return all(map(lambda i:isinstance(i, cl), inst))
  20.  
  21.  
  22. #I want that if I do something like innertable["row"][4][3]="Something" that this carries over to innertable["col"][3][4]
  23.  
  24. class InnerTable:
  25.  
  26.     def __init__(self, rows, cols):
  27.         if rows<1 or cols<1 or not Helper.lio(int, rows, cols): raise Exception("Invaild rows and or cols")
  28.         ret={"rows":[[None]*(cols+1)], "cols":[[None]*(rows+1)]}
  29.         tid=[]
  30.         self.rows=rows
  31.         self.cols=cols
  32.         for r in range(1, rows+1):
  33.             ret["rows"].append([None])
  34.             for c in range(1, cols+1):
  35.                 f=str(r)+"&"+str(c)
  36.                 tid.append((r, c))
  37.                 ret["rows"][-1].append(f)
  38.                 if c==len(ret["cols"]):
  39.                     ret["cols"].append([None, f])
  40.                 else:
  41.                     ret["cols"][c].append(f)
  42.         self.table=ret
  43.         self.tid=tid
  44.         self.element=0
  45.         print("done!!!!!")
  46.  
  47.  
  48.     def __iter__(self):
  49.         self.element=0
  50.         return self
  51.  
  52.     def __next__(self):
  53.         try:
  54.             i=self.element
  55.             self.element+=1
  56.             return self[self.tid[i]]
  57.         except IndexError:
  58.              raise StopIteration
  59.  
  60.     def __len__(self):
  61.         return self.cols*self.rows
  62.  
  63.  
  64.     def __getitem__(self, item):
  65.        if item=="rows":
  66.            return self.table["rows"]
  67.        elif item=="cols":
  68.            return self.table["cols"]
  69.        elif isinstance(item, Iterable) and len(item)==2:
  70.            if Helper.lio(int, item):
  71.                return self[item[0]][item[1]]
  72.            elif item[0]==True and isinstance(item[1], int):
  73.                return self.table[self.tid[item[1]]]
  74.        else:
  75.            return self.table["rows"][item]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement