python(矩阵加法)中的某些代码行是什么意思?

What do some of these lines of code mean in python (Matrix Addition)?

我试图通过查看这段接受矩阵并在所述矩阵中添加数字的代码来理解某些 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)]。该特定行是什么意思,它在这段代码中的确切用途是什么?上面的评论并没有真正帮助我。

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

  1. [:A_col] 称为列表 slicing。 它的工作方式是给定一个列表,您可以选择通过 'slicing' 获取它的子集。您可以给它一个起始位置(默认为 0)和一个结束位置(默认为列表末尾),这就是您将其切片的方式。在您的情况下,您正在从索引零开始切割列表,直到索引 A_col 不包括。
  2. result = [([0]*A_col) for i in range(A_row)] 由一些东西组成,所以我会分解它,
    首先,您正在做的事情称为 列表理解。这是一种从另一个可迭代对象创建列表的快速方法,您可以阅读更多相关内容 here。 其次,在列表理解中,你是 'multiplying' 一个包含单个元素零的列表到一个大小为 A_col 且包含零的列表。

希望这能澄清一些事情

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

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

最有可能的目的是确保如果输入太长,它会被修剪为矩阵中的列数。我认为如果输入太短,代码就会中断。

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

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

[0]*A_col

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