我有一个清单
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:字符串索引超出范围
答案 0 :(得分:2)
相当(un)幸运的是,列表__repr__
的{{1}}的返回值与字符串[('aaaa', 34)]
相同。
这就是为什么你"[('aaaa', 34)]"
输出看起来像列表的东西的原因。但你拥有的不是列表列表,而是字符串列表。
print
您可能希望在将参数传递给函数之前将字符串转换为列表。
如果您需要安全地从您拥有的字符串转换到列表中,您可以查看ast.literal_eval
。