【问题标题】:How to calculate and replace values in a list of lists如何计算和替换列表列表中的值
【发布时间】:2019-04-24 22:50:12
【问题描述】:

我有一个带有浮点数的列表。

lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]

对于每个元素,我想找到倒数并忽略 if == 0.0

请不要使用模块,首选使用列表和循环。

这就是我想出的全部:

lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
new_values=[]
for slist in lst:
        for x in slist:
            if x!=0.0:
                reciprocal=1.0/x
                new_values.append(reciprocal)
            else:
                reciprocal=0.0
                new_values.append(reciprocal)

当然,这只是创建一个新列表,而我希望它保留在我编写的列表列表中 (lst)。

预期

lst=[[1/1.0, 1/2.0, 1/3.0] , [1/1.0, 1/2.0] , etc...]]

请注意,我最初在 lst[1] 中的 0.0 在计算后被删除。

【问题讨论】:

  • for i 应该是for slist

标签: python python-3.x


【解决方案1】:

使用列表理解并覆盖您的 lst 变量:

lst = [[x if x == 0.0 else 1/x for x in l] for l in lst]

请注意 x == 0.0 是不好的做法,但我认为这不是这个问题的重点

输出:

[[1.0, 0.5, 0.3333333333333333], [0.0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]

【讨论】:

    【解决方案2】:

    如果您想更改嵌套列表中的值而不是用新列表替换它,您可以这样做:

    lst = [[1.0, 2.0, 3.0] , [0.0, 1.0, 2.0] , [1.0, 2.0, 3.0]]
    for slist in lst:
        for i, x in enumerate(slist):
            slist[i] = 1.0 / x if  x != 0.0 else 0.0
    print(lst)
    # [[1.0, 0.5, 0.3333333333333333], [0.0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
    

    【讨论】:

      【解决方案3】:
      lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
      
      def reciprocate(list_input):
          new_list = []
          for x in list_input:
              if x!=0.0:
                  new_list.append(1/x)
          return new_list
      
      new_lst = [reciprocate(l) for l in lst]
      print(new_lst)
      

      这给出了以下输出。

      [[1.0, 0.5, 0.3333333333333333], [1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
      

      【讨论】:

      • 如果x==0.0,我认为OP希望保留x,所以我认为您需要删除continue并将其替换为new_list.append(x)
      • 如果你读了他问题的最后几行,他特别提到他想去掉列表中的元素,如果它是x==0.0。他还在预期输出中删除了该元素。
      • 那么在这种情况下,你不需要做if/else,只需做if x != 0.0: new_list.append(1/x)
      • @HS-nebula 你是对的。根据您的建议调整我的代码。谢谢。
      【解决方案4】:

      您需要在每个外部迭代中创建一个嵌套列表。

      lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
      new_values=[]
      for slist in lst:
          new_sublist = []
          for x in slist:
              if x!=0.0:
                  reciprocal=1.0/x
              else:
                  reciprocal=0.0
              new_sublist.append(reciprocal)
          new_values.append(new_sublist)
      

      【讨论】:

        【解决方案5】:

        您可以使用列表组合来实现所需:

        lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
        reciprocals = [list(map(lambda x: (1/x) if x != 0.0 else 0.0, sub_list)) for sub_list in lst]
        

        输出:

        [[1.0, 0.5, 0.3333333333333333], [0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
        

        【讨论】:

          猜你喜欢
          • 2015-07-26
          • 2022-11-10
          • 2019-07-28
          • 2014-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-30
          相关资源
          最近更新 更多