python - 如何在 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])
索引错误:列表索引超出范围
解决方案
你应该这样做:
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)
你得到的原因IndexError
是i
你的循环中被分配了x
列表的值(不是索引!),并且你试图用这些值索引列表。因此,例如在循环的最后一次i = 15
该元素的索引仅为14
.
推荐阅读
- ruby-on-rails - 查询中的 OR 条件
- hive - 主键和外键约束在 Hive 中如何工作?
- android - 删除 svg click 上的“全选”蓝色水滴
- javascript - 我的 Carousel Materialise 不起作用。我正在使用最新版本 1.0.0
- .net - 在远程环境的 web api 中访问 swagger 时遇到问题?
- authentication - 如何在 Asp.Net core 2.0 身份中的身份验证 cookie 过期之前获得剩余时间
- javascript - 如何根据页面是否滚动到顶部来修改类?
- node.js - 我的 SQS 队列没有显示来自带有 node.js 的 aws-sdk 的任何消息
- c# - 在 64 位机器上注册 32 位 dll
- javascript - 我如何知道 for 在 javascript 的字典中打印的对象是什么?