将列表的每个元素作为参数传递给函数

时间:2016-07-13 15:15:15

标签: python

我有一个清单

try_list = ["[('aaaa', 34), ('bbbb', 1), ('cccc', 1)]", "[('dddd', 4), ('eeee', 1)]"]

“”中的每个条目都是列表的元素。

当我说

for i in try_list:
    print i 

我得到了各个元素,

[('aaaa', 34), ('bbbb', 1), ('cccc', 1)]
[('dddd', 4), ('eeee', 1)]

但是,如果我尝试将每个人传递给函数(比如func)

for i in try_list:
    item = func(i)

我收到错误。

如果我逐个测试每个元素的函数func,它工作正常,所以func很好。所以错误在于将列表作为参数传递,一次一个。这样做的正确方法是什么?

这是func:

def func(my_list):
    ans = []
    for i,name in enumerate(my_list):
        print name[0],name[1]
        ans.append(name)
    return ans

如果我说

func([('aaaa', 34), ('bbbb', 1), ('cccc', 1)])

我得到正确的输出

aaaa 34

bbbb 1

cccc 1

[('aaaa', 34), ('bbbb', 1), ('cccc', 1)]

但如果我说

for i in try_list:
    item = func(i)

我收到错误

追踪(最近一次通话):   文件“”,第2行,in   文件“”,第4行,在func中 IndexError:字符串索引超出范围

1 个答案:

答案 0 :(得分:2)

相当(un)幸运的是,列表__repr__的{​​{1}}的返回值与字符串[('aaaa', 34)]相同。

这就是为什么你"[('aaaa', 34)]"输出看起来像列表的东西的原因。但你拥有的不是列表列表,而是字符串列表。

print

您可能希望在将参数传递给函数之前将字符串转换为列表。

如果您需要安全地从您拥有的字符串转换到列表中,您可以查看ast.literal_eval