首页 > 解决方案 > Python elif 优化问题

问题描述

如何优化这段代码?

如何尽可能短地优化这段代码。我是初学者请帮助我

出。条件:

def get_math_value(array, data, value):
    if data == 'row' and value == 'min':
        arr = array
        min_row = list(map(min, arr))
        print(min_row)
    elif data == 'row' and value == 'max':
        arr = array
        max_row = list(map(min, arr))
        print(max_row)
    elif data == 'row' and value == 'mean':
        arr = array
        mean_row = np.mean(arr, axis=1)
        print(mean_row)
    elif data == 'row' and value == 'median':
        arr = array
        median_row = np.median(arr, axis=1)
        print(median_row)
    elif data == 'column' and value == 'min':
        arr = array
        min_column = list(map(min, zip(*arr)))
        print(min_column)
    elif data == 'column' and value == 'max':
        arr = array
        max_column = list(map(max, zip(*arr)))
        print(max_column)
    elif data == 'column' and value == 'mean':
        arr = array
        mean_column = np.mean(arr, axis=0)
        print(mean_column)
    elif data == 'column' and value == 'median':
        arr = array
        median_column = np.median(arr, axis=0)
        print(median_column)
    else:
        print('[]')

标签: pythonarraysnumpyif-statement

解决方案


您也可以将np其用于未使用它的分支,因此使用getattr. 您也不需要所有这些arr = array作业。

您的整个功能可以变成:

def get_math_value(array, data, value):
     # TODO maybe check explicitly for 'row'/'column', otherwise display an error
    axis = 1 if data == 'row' else 0
    try:
        print(list(getattr(np, value)(array, axis)))
    except AttributeError:
        print('[]')

然后

get_math_value([[1, 2, 3], [5, 4, 6]], 'row', 'min')
get_math_value([[1, 2, 3], [5, 4, 6]], 'row', 'max')
get_math_value([[1, 2, 3], [5, 4, 6]], 'column', 'min')
get_math_value([[1, 2, 3], [5, 4, 6]], 'row', 'median')
get_math_value([[1, 2, 3], [5, 4, 6]], 'row', 'non_existing_numpy_method')    

输出

[1, 4]
[3, 6]
[1, 2, 3]
[2.0, 5.0]
[]

推荐阅读