【问题标题】:Subtract each value of a list Python减去列表Python的每个值
【发布时间】:2016-06-02 17:24:41
【问题描述】:

我正在尝试构建一个简单的计算器。我已经使用 sum 函数完成了加法部分。但是,我无法通过减法实现相同的效果。我想从它之前的值中减去列表中的每个值,即,如果列表(用户输入)是 [10,5,3],我希望我的输出是 10-5-3=2。到目前为止,这是我的代码。

def calculate():
    input = raw_input("input: ")
    if "+" in input:
        sum_val = sum(map(float, input.split('+')))
        if sum_val.is_integer():
            print int(sum_val)
        else:
            print sum_val
    elif "-" in input:
        print map(float, input.split('-'))

calculate()

用户输入可以是 10-5-3。

【问题讨论】:

    标签: python python-2.7 calculator subtraction


    【解决方案1】:
    l = [10,5,3]    
    s = reduce(lambda x, y: x - y, l)
    

    s == 2

    【讨论】:

      【解决方案2】:

      map(float, input.split('-'))行替换为以下代码,

      import functools
      import operator
      
      l = map(float, input.split('-'))
      r = functools.reduce(operator.sub, l)   # 3
      

      【讨论】:

        【解决方案3】:

        你需要这两个函数:

        from operator import sub
        from functools import reduce
        reduce(sub, map(float, input.split('-')))
        

        【讨论】:

          【解决方案4】:

          试试这个

          l = [10,5,3]
          if len(l) > 1:
             ans = l[0] - sum(l[1:])
          else:
             ans = sum(l)
          print(ans)
          

          输出:2

          【讨论】:

            【解决方案5】:

            试试这个 -

            user_input = [10, 5, 3]
            
            equation = '-'.join(map(str, user_input))
            
            print(equation, '=', eval(equation))
            

            输出 -

            10-5-3 = 2
            

            【讨论】:

              【解决方案6】:

              听起来您可以使用 Sentinel。哨兵基本上允许您跟踪循环中的任意条件。加法工作正常,因为您的初始总和为 0,您可以继续添加以增加该值。但是对于减法,您需要使用列表中第一个出现的整数,在索引 0 处初始化一个 sum 变量。

              例子:

              sum = 0
              print_string = ""
              sample_list = [10,5,3]
              for i in range(len(sample_list)):
                  if (i == 0):
                      sum = sample_list[i]
                  else:
                      sum-=sample_list[i]
              
                  if ((i+1) < len(sample_list)):
                      print_string = print_string + str(sample_list[i]) + "-"
              
                  # Now is time to finish it up
                  print_string = print_string + "=" + str(sum)
              
                  print(print_string)
              

              输出:

              10-5-3=2
              

              【讨论】:

                【解决方案7】:

                其他答案使用标准函数,特别是functools.reduce

                以下对我来说看起来更简单,虽然它只使用意图列表:

                head, *tail = [10, 5, 3]
                r = sum(-x for x in tail, head)
                print(r)
                

                【讨论】:

                • 这是错误的。 OP 需要10 - 5 - 3,而不是-10 - 5 -3
                猜你喜欢
                • 2011-06-22
                • 2023-02-23
                • 2021-11-22
                • 1970-01-01
                • 2020-11-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多