【问题标题】:Sum of numbers excluding those coming between 5 and 8(5 and 8 inclusive)不包括介于 5 和 8(包括 5 和 8)之间的数字的总和
【发布时间】:2019-04-04 03:22:53
【问题描述】:

如何在Python中找到列表[1,2,2,5,3,1,7,8,4]中不位于58之间的所有数字的总和(总和中也不应考虑5和8)(即sum= 1+ 2+2+4=9) ?

【问题讨论】:

  • 您是否排除了那些在数字上介于58 之间的值,或者那些介于58 之间的值在列表中
  • 显然,这些在列表中的 5 到 8 之间
  • 你能检查我的回答是否解决了你的问题吗?
  • 1+2+2=5(排除那个组合)5+3=8(排除那个组合)5+2=7(排除那个组合……这是你要找的模式吗?

标签: python python-3.x python-3.6


【解决方案1】:
sum = 0
for number in [1,2,2,5,3,1,7,8,4]:
    if not 5 <= number <= 8:
        sum += number

【讨论】:

  • 仅代码的答案不被认为是好的。解释一下你的答案是如何工作的会很好。
【解决方案2】:

您可以使用range(5, 8+1) 定义要排除的数字列表,并简单地遍历您的数字并排除范围,

numbers =  [1,2,2,5,3,1,7,8,4]
exclude = range(5, 8+1)  # exclude numbers 5,6,7,8

# sum numbers excluding numbers between 5-8
print(sum(number for number in numbers if number not in exclude))
# output,
13

【讨论】:

    【解决方案3】:

    此生成器生成列表中不介于列表中 58 之间的所有项目。然后我们可以将该生成器传递给sum 以获取这些值的总和。它的工作原理是获取所有不是5 的项目,然后忽略所有不是8 的项目,同时也忽略它在5 之后看到的第一个8

    from itertools import takewhile, dropwhile
    
    def outside(iterable, start, end):
        it = iter(iterable)
        yield from takewhile(start.__ne__, it)
        yield from dropwhile(end.__eq__, dropwhile(end.__ne__, it))
    
    print(sum(outside([1,2,2,5,3,1,7,8,4], 5, 8)))
    # 9
    
    print(list(outside([1,2,2,5,3,1,7,8,4], 5, 8)))
    # [1, 2, 2, 4]
    

    【讨论】:

    • @Ben 为什么不呢?这不是根据它们的价值排除项目,而是根据它们在列表中的位置(这是我认为提问者想要的)
    • 一定喜欢这个。 :) 推广到任何可迭代对象。
    【解决方案4】:

    尝试使用将生成器表达式传递给sum

    >>> lst = [1,2,2,5,3,1,7,8,4]
    >>> sum(i for i in lst if not 5 <= i <= 8)
    13
    

    【讨论】:

      【解决方案5】:
      def sum_of_numbers(input_list):
          output_num = 0
      
          for a in range(0,len(input_list)):
              position = 0
      
              for n in input_list:
                  if n == 5:
                      pos1 = position
      
                  if n == 8:
                      pos2 = position
                  position+=1
      
              output_num = output_num + input_list[a]
      
          for b in range(pos1,pos2+1):
              output_num = output_num - input_list[b]
      
          return output_num
      
      input_list = [1,2,2,5,3,1,7,8,4]
      output_num = sum_of_numbers(input_list)
      print(output_num)
      

      【讨论】:

      • 我希望这是一个讽刺
      • @SergeyShubin,至少它是正确的。 OP 要求的大多数其他答案都没有给出 9。
      【解决方案6】:

      不像the generator solution那么酷,但比other correct answer短很多。

      l = [1,2,2,5,3,1,7,8,4]
      print(sum(l[:l.index(5)] + l[l.index(8) + 1:]))
      

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 1970-01-01
        • 2011-08-24
        • 2020-01-08
        • 1970-01-01
        • 2014-07-24
        • 2011-02-21
        • 1970-01-01
        • 2019-11-28
        相关资源
        最近更新 更多