使用嵌套列表/嵌套循环

Ism*_*ael 3 python nested list

我想弄清楚如何在 Python 中使用嵌套列表/嵌套循环。我应该编写函数来创建一个新表,该表由以列表形式添加 2 个输入表的索引组成。因此,例如,如果函数是 addTables,我将运行:

addTables([[1,1],[1,1]],[[2,2],[2,2]])
Run Code Online (Sandbox Code Playgroud)

我会得到:

[[3,3],[3,3]]
Run Code Online (Sandbox Code Playgroud)

我很难弄清楚。首先,当我运行代码时,我编写的函数返回 [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
Run Code Online (Sandbox Code Playgroud)

其次,我们应该使用多个函数。我不知道如何拆分程序,以便不同的部分由不同的功能完成。有人能指出我正确的方向吗?任何提示将非常感谢。

Cor*_*mer 5

首先使用嵌套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]]
Run Code Online (Sandbox Code Playgroud)

另一种方法是将其分解为两个函数。第一个可以添加两个列表,然后外部函数可以调用它来添加表。

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]]
Run Code Online (Sandbox Code Playgroud)

更简洁地说,这可以使用嵌套列表理解来完成

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]]
Run Code Online (Sandbox Code Playgroud)

最后你可以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]])
Run Code Online (Sandbox Code Playgroud)