2014-05-08 51 views
1

我有类似下面的一个复杂的变量...如何将列表的元素作为变量返回?

test_list[[test1, test1_var1, test1,var2], [test2, test2_var1]] 

我写了一个函数来提取所需的测试变量,见下文......

def find_test(test_list, search_term): 
    for index in range(len(test_list)): 
     if test_list[index][0] == search_term: 
      return test_list[index][1:] 

这将返回的东西像以下...

[test1_var1, test1_var2] 

我想能够返回变量作为单个变量而不是列表中的元素。我会如何去做这件事?我如何返回可变数量的变量? (有点像* args来,但要求退货,而不是参数)

+0

总是有两个值'return'ed? – jonrsharpe

+0

只需将列表元素加入到一个字符串中:'return''.join([test1_var1,test1_var2])' –

+0

@jonrsharpe对不起,我应该说清楚了。我希望能够灵活地返回任意数量的变量。 – Marmstrong

回答

1

其实你可以做你想做的,通过使用列表:

def find_test(test_list, search_term): 
    for index in range(len(test_list)): 
     if test_list[index][0] == search_term: 
      return test_list[index][1:] 

解构数组的语法是有你:

foo, bar = find_text(x, y) 

,如果你想要得到的结果作为一个列表,您可以:

l = find_text(x,y) 

,如果你想只有一个ELE换货:

foo, _ = find_text(x,y) 
_, bar = find_text(x,y) 

如果你喜欢阅读,这里有一些资源:

2

在蟒蛇,返回多个变量对应于返回可迭代,所以返回一个列表或“多个变量”没有实际区别:

def f(): 
    return 1,2 
def g(): 
    return [1,2] 
a,b=f() 
c,d=g() 

这两个函数之间的唯一区别是,f返回一个元组,并g返回一个列表 - 这是无所谓,如果您在返回值使用多个任务。

0

只需使用内置过滤器和扩大成果在你的函数调用:

def search(haystack, needle): 
    return filter(lambda x: x[0] == needle, haystack)[0][1:] 

a,b = search(test_list, 'test1') 

记住,如果你的结果是两个以上的项目,上面会失败。

相关问题