Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import Iterable
- class Helper:
- @staticmethod
- def flatten(items, useValues=True):
- """Yield items from any nested iterable; see Reference."""
- for x in items:
- if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
- for sub_x in Helper.flatten(x.values() if isinstance(x, dict) and useValues else x):
- yield sub_x
- else:
- yield x
- @staticmethod
- def lio(cl, *inst):
- inst=list(Helper.flatten(inst))
- return all(map(lambda i:isinstance(i, cl), inst))
- #I want that if I do something like innertable["row"][4][3]="Something" that this carries over to innertable["col"][3][4]
- class InnerTable:
- def __init__(self, rows, cols):
- if rows<1 or cols<1 or not Helper.lio(int, rows, cols): raise Exception("Invaild rows and or cols")
- ret={"rows":[[None]*(cols+1)], "cols":[[None]*(rows+1)]}
- tid=[]
- self.rows=rows
- self.cols=cols
- for r in range(1, rows+1):
- ret["rows"].append([None])
- for c in range(1, cols+1):
- f=str(r)+"&"+str(c)
- tid.append((r, c))
- ret["rows"][-1].append(f)
- if c==len(ret["cols"]):
- ret["cols"].append([None, f])
- else:
- ret["cols"][c].append(f)
- self.table=ret
- self.tid=tid
- self.element=0
- print("done!!!!!")
- def __iter__(self):
- self.element=0
- return self
- def __next__(self):
- try:
- i=self.element
- self.element+=1
- return self[self.tid[i]]
- except IndexError:
- raise StopIteration
- def __len__(self):
- return self.cols*self.rows
- def __getitem__(self, item):
- if item=="rows":
- return self.table["rows"]
- elif item=="cols":
- return self.table["cols"]
- elif isinstance(item, Iterable) and len(item)==2:
- if Helper.lio(int, item):
- return self[item[0]][item[1]]
- elif item[0]==True and isinstance(item[1], int):
- return self.table[self.tid[item[1]]]
- else:
- return self.table["rows"][item]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement