更好的处理嵌套列表的方法

时间:2010-12-21 06:14:44

标签: python

my_list = [ [1,2,3,4,5,6], [1,3,4],[34,56,56,56]]
for item in my_list:
    var1,var2,var3,var4,var5,var6 = None
     if len(item) ==1:
          var1 = item[0]
     if len(item) == 2:
          var1 = item[0]
          var2  = item[1]
     if len(item) == 3:
         var1 = item[0]
         var2 = item[1]
         var3 = item[2]
     if len(item) == 4:
        var1 = item[0]
        var2 = item[1]
        var3 = item[2]
        var4 = item[3]
    fun(var1,var2,var3,var4,var5,var6)

我有一个功能

def fun(var1, var2 = None, var3 = None, var4 = None, var5=None, var6= None)

取决于我内部列表中的值。我正在传递它的功能。 我希望我说清楚。

由于

2 个答案:

答案 0 :(得分:2)

请参阅Calls中的Function definitionsPython documentation,具体为:

  

如果语法*表达式出现在   函数调用,表达式必须   评估一个序列。来自的元素   这个序列被视为好像它们一样   是额外的位置   参数....

     
     

如果语法**表达式出现在函数调用中,则表达式必须求值为映射,其内容被视为附加关键字参数....

     
     

...函数调用总是指定值   对于所提到的所有参数   参数列表,来自位置   参数,来自关键字参数,或   来自默认值。如果表格   “*标识符”存在,它是   初始化为接收任何元组的元组   超额位置参数,   默认为空元组。如果   形式“**标识符”存在,它是   初始化为新词典   收到任何多余的关键字   参数,默认为新的空   字典。

示例1

您最有可能需要以下内容,因为您的参数是简单的整数:

my_list = [[1,2,3,4,5,6],[1,3,4],[34,56,56,56]]

def func(*var):
    for arg in var:
        print arg,
    print

for args in my_list:
    func(*args)

输出1

1 2 3 4 5 6 
1 3 4 
34 56 56 56 

示例2

下一个示例显示您可以使用默认值填写函数的任意数量的参数:

my_list = [[1,2,3,4,5,6],[1,3,4],[34,56,56,56]]

def func(var1=None,var2=None,var3=None,var4=None,var5=None,var6=None):
    print var1,var2,var3,var4,var5,var6

for args in my_list:
    func(*args)

输出2

1 2 3 4 5 6
1 3 4 None None None
34 56 56 56 None None

示例3

您甚至可以使用**语法无序填写它们:

my_list = [dict(var1=1,var5=5,var6=6),dict(var2=2,var4=4)]

def func(var1=None,var2=None,var3=None,var4=None,var5=None,var6=None):
    print var1,var2,var3,var4,var5,var6

for args in my_list:
    func(**args)

输出3

1 None None None 5 6
None 2 None 4 None None

答案 1 :(得分:1)

编辑 - 真正的问题是 - 我的函数采用def fun(var1,var2 = None,var3 = None,var4 = None,var5 = None,var6 = None):所以如果我的内部列表只包含1个元素然后函数只接受var1。但如果我的内部列表中有超过1个元素,则传递给函数

您想要使用的是*运算符

fun(*l)

相当于

fun(l[0],l[1],....)

所以你想使用:fun(*my_list[0])作为第一个,依此类推 要将它用于my_list中的所有列表,请执行以下操作:

for i in my_list:
    fun(*i)