【问题标题】:Subtracting two lists together, if value is negative, take the value from the first list (Python)将两个列表相减,如果值为负,则从第一个列表中取值(Python)
【发布时间】:2020-06-03 15:03:34
【问题描述】:

例如,有 2 个列表。

list_1= [1, 2, 3]
list_2 = [2, 0, 4]

使用 operator.sub 对两个列表进行简单减法将返回:

list_3 = [-1, 2, -1]

我想返回另一个列表_4:

list_4 = [1, 0, 3]

list_4 的本质意思是如果list_3 的结果是否定的,我会取list_1 的值。如果 list_3 的结果是肯定的,我会取 list_2 的值。

因此 list_4 应该分别返回 1(来自 list_1)、0(来自 list_2)和 3(来自 list_1)。

我知道这可能与列表理解有关,但我自己似乎无法弄清楚。如果我能得到任何帮助,我将不胜感激!

【问题讨论】:

    标签: python


    【解决方案1】:

    列表理解:

    [x if x < y else y for x,y in zip(list_1, list_2)]
    

    结果:

    [1, 0, 3]
    

    替代方案:

    • [min(x,y) for x,y in zip(list_1, list_2)]
    • [min(*e) for e in zip(list_1, list_2)]
    • import numpy as np
      np.minimum(list_1, list_2).tolist()

    【讨论】:

      【解决方案2】:

      这可能不是最 Pythonic 的方式。我假设零是正数。

      list_4 = []
      for i, element in enumerate(list_3):
         if element < 0:
            list_4.append(list_1[i])
         else: # element >= 0
            list_4.append(list_2[i])
      

      【讨论】:

        【解决方案3】:

        使用列表理解..

        list_4 = [i if k<0 else j for i,j,k in zip(list_1, list_2, list_3)]
        

        【讨论】:

          【解决方案4】:

          这应该适合你:

          list_4 = []
          for i, num in enumerate(list_3):
              list_4.append(list_1[i] if element < 0 else list_2[i])
          

          【讨论】:

            猜你喜欢
            • 2020-10-23
            • 2022-10-03
            • 2020-04-08
            • 2018-04-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-21
            • 1970-01-01
            相关资源
            最近更新 更多