遍历列表直到满足2个条件

时间:2018-10-03 18:17:33

标签: python list loops

我有一个列表,我想对列表中的所有数字求和... 除外,如果出现6,则不计算在内,也不计算该6中的任何数字,直到出现下一个7(也不计算7)。 7总是会出现在6之后的某个地方。

例如:

my_list = [1,2,3,6,1,1,1,7,2,2,2]
           1,2,3,.........,2,2,2    # Omit numbers from the first 6 to the next 7.

应输出12。

我知道如何识别6,只是不确定在后续7到来之前如何不对数字进行计数。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用布尔值作为标志。应该这样做:

list= [1,2,3,6,1,1,1,7,2,2,2] 
do_sum = True
total_sum = 0

for item in list:
   if item == 6:
       do_sum = False

   if do_sum:
      total_sum += item

   if not do_sum and item == 7:
       do_sum = True

最后一个if将检查6是否在7之前。因此,它将求和出现在6之前的任何七个。

此解决方案支持列表中的六七对七的多种情况。

答案 1 :(得分:0)

让我们像在纸上一样做到这一点:

  • 找到第一个6;标记该列表。
  • 在列表的其余部分,找到前7个;标记列表之后
  • 合并两个标记的列表部分;对这些元素求和。

代码,带有一行跟踪输出:

seq = [1, 2, 3, 6, 1, 1, 1, 7, 2, 2, 2]
first6 = seq.index(6)
rest = seq[first6:]
next7 = rest.index(7)
sum_list = seq[:first6] + rest[next7+1:]
print("Add these:", sum_list)
print("Sum:", sum(sum_list))

输出:

Add these: [1, 2, 3, 2, 2, 2]
Sum: 12

您可以通过组合表达式来缩短代码,但是我认为这对于您在编程生涯的现阶段来说更具可读性。

相关问题