同时迭代两个列表并尝试查找一个列表中的数字是否大于另一个列表中的项目

Iterating over two lists at the same time and try to find if a number in one list is bigger than items in the other list

(抱歉,如果我的标题令人困惑。我不确定如何描述这个问题)

我有两个列表,格式如下:

list_a = [[10, 1], [25, 2]] # list sorted base on the first element of each pair
list_b = [3, 14, 5, 26]

我正在尝试查看 list_b 中项目的总和是否大于 list_a[i][0] 中的项目总和,如果是,请将 list_a[i][1] 添加到总和中。想想玩游戏并获得 list_b 中的积分,并在达到 list_a 中指定的特定总分时获得奖励积分。

我的预期输出是一个数字序列。对于上面的例子:

# [3, 3+14+1, 3+14+1+5, 3+14+1+5+26+2]
# 3+14+1 because 3+14 is greater than 10
# 3+14+1+5+26+2 because 3+14+1+5+26 is greater than 25
[3, 18, 23, 51]

我的尝试:

sum_b = 0 # used to track sum of items in list_b
output_list = []

for i in list_a:
  for j in list_b:
    # go over list b to get current sum
    sum_b += j

    if sum_b > i[0]: # when I see sum_b > i[0], I add i[1] to sum_b
      sum_b += i[1] 
    output_list.append(sum_b)
    # I want to keep going through the list to see when sum_b gets greater than 25 and add 2 to sum_b

根据您更新的问题,您似乎想要找到 list_b 的累加和,并在满足条件时添加内部 list_a 的第二个元素。我建议先编译一个 list_b 的累计和列表,然后交叉检查 list_a 并添加符合要求的每个第二个元素:

cumsum_b = [sum(list_b[:i+1]) for i in range(len(list_b))]

# [3, 17, 22, 48]

result = []
for s in cumsum_b:
    for n, i in list_a:
        if s > n:
            s += i
    result.append(s)

# [3, 18, 23, 51]

保持接近你自己的尝试,但适当地推进你的 i 通过 list_a。这里 i 始终是下一个未使用的 list_a 对(或者 None 如果没有剩余),我在 [=16= 循环期间的正确位置使用它].

sum_b = 0 # used to track sum of items in list_b
output_list = []
iter_a = iter(list_a)
i = next(iter_a, None)

for j in list_b:
    # go over list b to get current sum
    sum_b += j

    if i and sum_b > i[0]: # when I see sum_b > i[0], I add i[1] to sum_b
        sum_b += i[1]
        i = next(iter_a, None)
    output_list.append(sum_b)

它只需要线性时间,因为我是并行遍历两个列表而不是嵌套的全长循环。