Python 通过迭代器定义的函数列表包含同一函数的一组副本

Python 通过迭代器定义的函数列表包含同一函数的一组副本,python,pointers,iterator,Python,Pointers,Iterator,我想创建一个函数列表,每个函数都在集合{0,1,2}上定义,方法是将它们的值设置为在值列表中找到的值。为了检查我做了什么,我随后打印了我函数的值。这里有两种尝试: values_list = [[1,2,3],[4,5,6]] function_list = [] function_list.append((lambda x: values_list[0][x])) function_list.append((lambda x: values_list[1][x])) print('Value

我想创建一个函数列表,每个函数都在集合{0,1,2}上定义,方法是将它们的值设置为在值列表中找到的值。为了检查我做了什么,我随后打印了我函数的值。这里有两种尝试:

values_list = [[1,2,3],[4,5,6]]

function_list = []
function_list.append((lambda x: values_list[0][x]))
function_list.append((lambda x: values_list[1][x]))
print('Values of 1st function:',function_list[0](0),function_list[0](1),function_list[0](2))
print('Values of 1st function:',function_list[1](0),function_list[1](1),function_list[1](2))

function_list1 = []
for i in range(2):
    function_list1.append((lambda x: values_list[i][x]))
print('Values of 1st function:',function_list1[0](0),function_list1[0](1),function_list1[0](2))
print('Values of 2nd function:',function_list1[1](0),function_list1[1](1),function_list1[1](2))
当然,第一次尝试可以正常工作,但在第二次尝试中,列表中的两个函数是相同的。它们都返回第二组值

好的,我想原因是,我在定义中使用的迭代器在第二组值处停止。但在实践中,我会有大量不同长度的函数值列表,我不能像第一次尝试那样为列表中的每个函数键入一行。如何解决此问题?

将此行修复为:

function_list1.append((lambda x,y=i: values_list[y][x]))

工作完美-谢谢!