【问题标题】:What do some of these lines of code mean in python (Matrix Addition)?这些代码行中的一些在python(矩阵加法)中意味着什么?
【发布时间】:2021-08-24 06:34:47
【问题描述】:

我试图通过查看这段代码来理解一些 Python 关键字和函数的作用,该代码接受矩阵并在所述矩阵中添加数字,但我在理解其中一些代码行的含义时遇到了一些麻烦。对于像我这样的编程新手来说,一个易于理解的解释会很有帮助。

这里是代码。

# input operation
op = input("Enter operation : ")
#if operation is addition
if(op == "add"):
    # A and B for two matrix
    A = []
    B = []
    #input dimensions for A matrix,
    A_row, A_col = input("Dimension for matrix A : ").split()
    #convert dimensions to int type
    A_row = int(A_row)
    A_col = int(A_col)
    #input, elements of matrix A
    for i in range(A_row):
        # input rows wise
        print("Enter elements for row", i+1)
        row = list(map(int, input().split()))[:A_col]
        #append row to matrix A
        A.append(row)
  
    #input, dimension for matrix B
    B_row, B_col = input("Dimension for matrix B : ").split()
    #convert to increate a matt type
    B_row = int(B_row)
    B_col = int(B_col)
    #input for matrix B, elements
    for i in range(A_row):
        print("Enter elements for row", i+1)
        row = list(map(int, input().split()))[:B_col]
        B.append(row)
  
    #create a matrix for result with 0 of size of matrix A size
    result = [([0]*A_col) for i in range(A_row)]
  
    # loop and do addition of A and b , store to result matrix
    for i in range(A_row):
        for j in range(A_col):
            result[i][j] = A[i][j] + B[i][j]
    #print result
    print("result")
    for row in result:
        for x in row:
            print(x, end=' ')
    print()

#if operation is not valid
else:
    print("Invalid operation")

我的问题:

  1. row = list(map(int, input().split()))[:A_col]末尾的那个[:A_col]是什么目的?
  2. 现在这才是我真正感到困惑的地方。之后来自result 的一切对我来说似乎是模糊的。尤其是result = [([0]*A_col) for i in range(A_row)]。那条特定的行是什么意思,它在这段代码中的目的到底是什么?放在它上面的评论并没有真正帮助我。

我知道括号运算符的作用,但我不明白 [:A_col] 在 row = list(map(int, input().split()))[:A_col] 末尾的用途。

【问题讨论】:

  • 这不是关于你的一个问题,而是关于代码的另一部分:if 不是一个函数,不应该被这样对待(带括号)。所以if(op == "add"): 应该是if op == "add":。

标签: python computer-science


【解决方案1】:

row = list(map(int, input().split()))[:A_col]

第一部分要清楚,输入字符串被拆分成一个列表,然后使用map将所有字符串转换为int。 [:A_col] 是一个范围访问器。 [i] 访问列表的单个元素。 [start:end] 返回列表的一部分,从元素索引 start 开始,直到 end(唯一)。

目的很可能是确保如果输入太长,则将其修剪为矩阵中的列数。我认为如果输入太短,代码就会中断。

结果 = [([0]*A_col) for i in range(A_row)]

正如评论所暗示的那样,这会创建一个大小合适且全为零的矩阵。

[0]*A_col

这会创建一行零。列表上使用的乘法运算符会导致 [0] 添加到自身(= 连接)A_col 次。

【讨论】:

  • 这绝对有帮助!谢谢。
  • @0329 如果这回答了您的问题,请将其标记为已接受
【解决方案2】:
  1. [:A_col] 称为列表slicing。 它的工作方式是给定一个列表,您可以选择通过“切片”来获取其中的一个子集。您可以给它一个起始位置(默认为 0)和一个结束位置(默认为列表末尾),这就是您将它切片的方式。在您的情况下,您将列表从索引零切片到索引 A_col 不包括在内。
  2. result = [([0]*A_col) for i in range(A_row)] 是由一些东西编译而成的,所以我会分解它,
    首先,您正在执行一种称为列表理解 的操作。这是从另一个迭代创建列表的快速方法,您可以阅读更多关于它的信息here。 其次,在列表理解中,您正在将一个具有单个元素零的列表“乘以”一个大小为 A_col 且包含零的列表。

希望能解决一些问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2016-01-14
    • 2015-09-13
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多