我正试图弄清楚如何在Python中使用嵌套列表/嵌套循环。我应该编写函数来创建一个新表,该表包括以列表形式添加2个输入表的索引。因此,例如,如果函数是addTables,我会运行:
addTables([[1,1],[1,1]],[[2,2],[2,2]])
我会得到:
[[3,3],[3,3]]
我无法搞清楚。首先,我写的函数返回 [3,3,3,3]当我运行我的代码时:
def addElements(element1,element2):
newlist = []
for i in range(0,len(element1)):
for j in range(0,len(element1[i])):
new_element = element1[i][j] + element2[i][j]
newlist.append(new_element)
return newlist
其次,我们应该使用多种功能。我无法弄清楚如何拆分程序,以便不同的功能完成不同的部分。有人能指出我正确的方向吗?任何提示将不胜感激。
答案 0 :(得分:4)
首先使用嵌套的for
循环
def addTables(first, second):
new_table = []
for i in range(len(first)):
new_list = []
for j in range(len(first[0])):
new_list.append(first[i][j] + second[i][j])
new_table.append(new_list)
return new_table
>>> addTables([[1,1],[1,1]],[[2,2],[2,2]])
[[3, 3], [3, 3]]
另一种方法是将其分解为两个功能。第一个可以添加两个列表,然后外部函数可以调用它来添加表。
def addLists(first, second):
new_list = []
for i in range(len(first)):
new_list.append(first[i] + second[i])
return new_list
def addTables(first, second):
new_table = []
for i in range(len(first)):
new_table.append(addLists(first[i], second[i]))
return new_table
>>> addTables([[1,1],[1,1]],[[2,2],[2,2]])
[[3, 3], [3, 3]]
更简洁地说,这可以使用嵌套列表推导
来完成def addTables(first, second):
return [[i+j for i,j in zip(a, b)] for a, b in zip(first, second)]
>>> addTables([[1,1],[1,1]],[[2,2],[2,2]])
[[3, 3], [3, 3]]
最后,您可以在将来使用numpy
,这将非常有效地执行线性代数
import numpy as np
def addTables(first, second):
return np.array(first) + np.array(second)
>>> addTables([[1,1],[1,1]],[[2,2],[2,2]])
array([[3, 3],
[3, 3]])
答案 1 :(得分:2)
你没有初始化内部列表。为此,您需要在外部循环体的开头添加一个新行。但是,有一种更简单的方法。看看标准库的强大功能:
[[a+b for a,b in zip(arow, brow)] for arow, brow in zip(element1, element2)]
zip
的作用是将两个或多个迭代中的元素配对,例如列表。另一个“技巧”是使用列表推导来构建新表。
答案 2 :(得分:1)
您的代码存在的问题是您希望返回嵌套列表,但您只是创建结果并将结果附加到简单列表中。所以基本上你的代码应该看起来像
def addElements(element1,element2):
global_result = []
for i in range(len(element1)):
# For each line, create a lower level list
row_result = []
for j in range(len(element1[i])):
new_element = element1[i][j] + element2[i][j]
row_result.append(new_element) # Add element to your low-level list
# After the loop on the columns, add the row result to your global list
global_result.append(row_result)
return global_result
至于把它变成多个功能,我也不太确定......