【问题标题】:Python list splicing for 2D array二维数组的 Python 列表切片
【发布时间】:2019-08-08 22:00:21
【问题描述】:
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
matrix[3][1:] = matrix[3][0:-1]
print(matrix)

给出以下输出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 13, 14, 15]]

但是:

rows = 3
k = 0
matrix[rows-k][1+k:-k] = matrix[rows-k][k:-1-k]
print(matrix)

给出以下输出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 13, 14, 15, 14, 15, 16]]

谁能给我解释一下这是怎么回事?

【问题讨论】:

    标签: python python-3.x arraylist multidimensional-array


    【解决方案1】:

    有趣的问题。

    这是因为

    matrix[rows-k][1+k:-k] = matrix[rows-k][k:-1-k]
    

    等价于

    matrix[3][1:0] = matrix[3][0:-1]
    

    相当于

    matrix[3][1:1] = matrix[3][0:-1]
    

    所以当你做matrix[3][1:0] => matrix[index][start:stop:None]

    您的起始值为 1,大于您的停止值 0。在 start >= stop 的情况下,Python 设置 stop = start 并返回一个空切片。

    您可以检查 matrix[3][1:1] 的值,它是一个空切片,如 matrix[3][1:0]

    >>> matrix[3][1:0]
    []
    >>> matrix[3][1:1]
    []
    

    阅读更多:Python doc

    如果 i 大于或等于 j,则切片为空

    【讨论】:

      【解决方案2】:

      如果插入行 = 3 和 k = 0:

      matrix[3][1:0] = matrix[3][0:-1]
      

      它和你的第二行不一样

      matrix[3][1:] = matrix[3][0:-1]
      

      已添加。

      在第一个示例中,您从 1 插入一些数据。到最后的位置

      a = [1, 2, 3, 4]
      a[1:] = [100, 200, 300]
      print(a)
      OUTPUT: [1, 100, 200, 300]
      

      在第二种情况下,您在 0. 和 1. 位置之间插入一个值

      a = [1, 2, 3, 4]
      a[1:0] = [100, 200, 300]
      print(a)
      OUTPUT: [1,100, 200, 300, 2, 3, 4]
      

      【讨论】:

      • "在第二种情况下,您在 0. 和 1. 位置之间插入一个值" 这句话是不对的。 a[1:0] 返回一个空切片。尝试在 shell 中打印这个 a[1:0] 你不会得到 b/w 0-1 的值
      猜你喜欢
      • 2013-04-12
      • 2013-03-15
      • 2018-05-06
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多