2016-07-13 132 views
-3

我有一個列表傳遞列表的每個元素作爲參數傳遞給函數

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號線,在 文件 「」,4號線,在FUNC IndexError:字符串索引超出範圍

+4

這需要[mcve]。什麼是'func'?你得到的錯誤是什麼?什麼是你正在運行的確切代碼。 –

+0

我已經用完整的代碼更新了我的查詢,這給出了麻煩 – Ssank

回答

2

相當(un)幸運的是,列表[('aaaa', 34)]的返回值__repr__與字符串"[('aaaa', 34)]"相同。

這就是爲什麼你有print輸出看起來像列表的東西。但是你擁有的不是列表清單,而是一串字符串。


>>> print("[('aaaa', 34)]") 
[('aaaa', 34)] 
>>> 
>>> print([('aaaa', 34)]) 
[('aaaa', 34)] 

你可能想你的字符串轉換成一個列表傳遞作爲參數傳遞給你的函數之前。

如果您需要安全地使用您可以看看ast.literal_eval將字符串轉換爲列表。

相關問題