首页 > 解决方案 > 如何在 Python 中的两个长列表中减去特定切片的相应元素?

问题描述

假设我有以下两个列表:

x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

y = [None,None,None,None,None,10,20,30,40,50,60,70,80,90,100]

我需要减去每个列表的相应元素(x[i] - y[i]),并且我想从 x 的第 6 个元素(即 6)开始减去,因此 y 中的相应元素不为空(无)。以下代码是我尝试过的错误:

result = []

for i in x[5:]:
  result.append(x[i] - y[i])

索引错误:列表索引超出范围

标签: python

解决方案


你应该这样做:

for val1, val2 in zip(x[5:], y[5:]):
    result.append(val1 - val2)

或者

for val1, val2 in list(zip(x, y))[5:]:
    result.append(val1 - val2)

您也可以跳过这些None值,如下所示:

for val1, val2 in zip(x, y):
    if val2 is not None:  # can also check if val1 is not None if needed
        result.append(val1 - val2)

你得到的原因IndexErrori你的循环中被分配了x列表的值(不是索引!),并且你试图用这些值索引列表。因此,例如在循环的最后一次i = 15该元素的索引仅为14.


推荐阅读