code: def columns(self, *args) -> List[List[Well]]:
          
          col_dict = self._create_indexed_dictionary(group=2)
          keys = sorted(col_dict, key=lambda x: int(x))
  
          if not args:
              res = [col_dict[key] for key in keys]
          elif isinstance(args[0], int):
              res = [col_dict[keys[idx]] for idx in args]
          elif isinstance(args[0], str):
              res = [col_dict[idx] for idx in args]
          else:
              raise TypeError
          return res
docs: Accessor function used to navigate through a labware by column.
  
          With indexing one can treat it as a typical python nested list.
          To access row A for example,
          simply write: labware.columns()[0]
          This will output ['A1', 'B1', 'C1', 'D1'...].
  
          Note that this method takes args for backward-compatibility, but use
          of args is deprecated and will be removed in future versions. Args
          can be either strings or integers, but must all be the same type (e.g.:
          `self.columns(1, 4, 8)` or `self.columns('1', '2')`, but
          `self.columns('1', 4)` is invalid.
  
          :return: A list of column lists