从嵌套列表中提取数据

时间:2014-08-30 12:22:33

标签: python list function

所以我有列表给出了花的宽度,高度,x坐标和样式类型。列表如下所示:

list_5 = [[ 43, 440, -120, 'type_D'],
         [150, 380, -270, 'type_A'],
         [140, 495,  -30, 'type_B'],
         [180, 450,  300, 'type_E'],
         [40,  890, 660, 'type_A'],
         [170, 390,  300, 'type_D'],
         [140, 360,   30, 'type_F'],
         [160, 280, -160, 'type_C'],
         [130, 440, -420, 'type_F'],
         [260, 330, -390, 'type_B'],
         [170, 130, -270, 'type_E'],
         [340, 190,  -50, 'type_D'],
         [200, 210,  265, 'type_C'],
         [900, 320,  440, 'type_F'],
         [130, 200, -450, 'type_A']]

我需要帮助从此列表中获取数据并在函数中使用它来生成给定widthheightx坐标(可能是任何内容)的不同类型。

例如,如果Type_A的{​​{1}} width 30 height 30x坐标为30,我需要为样式A生成这些样式(可能是红色并且具有某些花瓣和纹理)。

到目前为止,我已创建了这个:

def draw_flowers(parameter_list):
    pass

draw_flowers(list_5)

我不知道如何从列表中提取数据,以便为列表中的某些类型提供维度。

2 个答案:

答案 0 :(得分:2)

编写switch-case的最pythonic方法是使用字典:

def styleA(width, height, x):
    # do something

def styleB(width, height, x):
    # do something

def styleC(width, height, x):
    # do something

flower_function = {
    'type_A': styleA,
    'type_B': styleB,
    'type_C': styleC
}

def draw_flowers(parameter_list):
    for width, height, x, type in parameter_list:
        flower_function[type](width, height, x)

答案 1 :(得分:0)

据我了解,调度不仅仅基于type参数。但可能意味着任意复杂的规则:

  

" Type_A的{​​{1}}为30,width为30,height坐标为30 => x"

也许您需要某种multimethods,但不仅基于类型,还基于值?

对于更基本的用法,可能会有这个诀窍:

styleA

这种方法的主要优点是它明确地将调度员(知道你的"规则")与应用各种风格的功能分开。这是放松测试的必要条件。