繁体   English   中英

使用嵌套列表/嵌套循环

[英]using nested lists/nested loops

我试图弄清楚如何在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

其次,我们应该使用多种功能。 我无法弄清楚如何拆分程序,以便不同的功能完成不同的部分。 有人能指出我正确的方向吗? 任何提示将非常感谢。

首先使用嵌套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]])

你没有初始化内部列表。 为此,您需要在外部循环体的开头添加一个新行。 但是,有一种更简单的方法。 看看标准库的强大功能:

[[a+b for a,b in zip(arow, brow)] for arow, brow in zip(element1, element2)]

zip作用是将元素配对在两个或多个iterables中,例如列表。 另一个'技巧'是使用列表推导来构建新表。

您的代码的问题是您想要返回嵌套列表,但您只是创建结果并将结果附加到简单列表。 所以基本上你的代码应该是这样的

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

至于把它变成多个功能,我也不太确定......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM