【问题标题】:How to add 1 to every element of a matrix / nested list in Python?如何将 1 添加到 Python 中矩阵/嵌套列表的每个元素?
【发布时间】:2015-11-18 00:15:54
【问题描述】:

我目前正在处理一个问题,需要我获取一个矩阵/嵌套列表,并将该列表的每个元素加 1,然后返回新修改的列表。我还必须这样做,以便用户可以输入他们选择的矩阵/嵌套列表。例如,该人将输入: [[1,2,3],[4,5,6]] 并且程序将返回 [[2,3,4],[5,6,7]] 到目前为止,我有这个代码:

m = int(input("Enter the number of rows: "))
matrice = []
i=0
while (i<m):
    print("Enter the row", i,"(separate each number by a space)")
    rang = [int(val) for val in input().split()]
    matrice.append(rang)
    i = i + 1
def add(a):
    res = []
    for i in range(len(a)):
        row=[]
        for j in range(len(a[0])):
            row.append(a[i][j]+1)
        res.append(row)
return res

此代码仅适用于完美矩阵。我的问题是,只要行的长度不同,它就会给我一个错误。例如,如果您要输入列表 [[1,2,3,4],[4,5,6]],它将不起作用。我想知道如何继续做这个问题。另外,如果可能的话,我宁愿不使用 numpy。预先感谢您的帮助。

【问题讨论】:

  • 那不是矩阵。矩阵是矩形的。

标签: python list matrix


【解决方案1】:

您可以非常简单地使用列表推导来做到这一点:

x = [[1,2,3,4],[4,5,6]]
[[z+1 for z in y] for y in x]
# [[2, 3, 4, 5], [5, 6, 7]]

但是,如果“矩阵”非常大,我建议您使用来自numpy 的矩阵对象。

【讨论】:

    【解决方案2】:

    怎么样:

    m = [[5, 7, 9, 3], [10, 8, 2, 9], [11, 14, 6, 5]]
    
    m2 = [[v+1 for v in r] for r in m]
    
    print m
    print m2
    

    【讨论】:

      【解决方案3】:

      不是使用 len(a[0]) 而是使用 len(a[i]) 它是当前行的长度

      def add(a):
          res = []
          for i in range(len(a)):
              row=[]
              for j in range(len(a[i])):
                  row.append(a[i][j]+1)
              res.append(row)
      return res
      

      【讨论】:

        【解决方案4】:

        对于任何嵌套的数字列表:

        test_data = [
            [1,2,3]
            ,[2,4]
            ,5
            ,[6,7,[8,9]]
            ]
        
        import types
        import numbers
        
        def inc_el(list_or_num):
            if isinstance(list_or_num, numbers.Number):
                return list_or_num +1
            elif type(list_or_num) == types.ListType:
                return map(inc_el, list_or_num)
        
        print map(inc_el, test_data)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-19
          • 1970-01-01
          • 2014-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多