Сделать столбец матрицы в Python с помощью оператора индексирования


Как я могу переработать этот код, чтобы обобщить разбора аргументов? Я чувствую, что этот код может быть лучше, но я не могу найти способ. Синтаксис использования оператора индекса аналогичен синтаксису индексации и NumPy.

    def __getitem__(self, arg):
    """
    [] operator to index elements in the matrix
    Usage: 
    >> mat[0] returns first row
    >> mat[3, :] return the 4th row
    >> mat[:, 7] return the 8th column
    >> mat[0, 0] returns first element
    """
    if isinstance(arg, int):
        return self.matrix[arg]
    elif isinstance(arg, tuple):
        if isinstance(arg[0], int) and isinstance(arg[1], int):
            y, x = arg
            return self.matrix[x][y]
        elif isinstance(arg[0], slice) and isinstance(arg[1], int):
            return self.get_column(arg[1])
        elif isinstance(arg[0], int) and isinstance(arg[1], slice):
            return self.get_column(arg[1])
    else :
        raise TypeError('Invalid indexing arguments type', arg)

Также, как я могу сделать функции setitem класса, который использует оператор [], чтобы установить колонки без переписывания функции методом getitem внутри? Вот мой текущей реализации, без возможности установки колонки.

    def __setitem__(self, arg, value):
    if isinstance(value, Fraction):
        self[arg] = value
    elif isinstance(value, list) and all(isinstance(elem, Fraction) for elem in value):
        self[arg] = value
    else:
        raise TypeError('Invalid value type', value)


155
1
задан 12 марта 2018 в 03:03 Источник Поделиться
Комментарии