arrays - python中的枚举和范围(len(list))有什么区别?
问题描述
有人能告诉我为什么下面的两个代码给我不同的结果吗?我的印象是 enumerate 和 range(len(list)) 都是可迭代的。
代码:试图找到一个数组的平衡索引
def equisum (arr):
tsum = sum(arr)
lsum = 0
num = len(arr)
for i in range(num):
tsum -= num
if lsum == tsum:
return i
lsum += num
return -1
arr = [-7, 1, 5, 2, -4, 3, 0]
print (equisum (arr))
Result : -1
def equisum (arr):
tsum = sum(arr)
lsum = 0
for i, num in enumerate(arr):
tsum -= num
if lsum == tsum:
return i
lsum += num
return -1
arr = [-7, 1, 5, 2, -4, 3, 0]
print (equisum (arr))
Result : 3 (the correct answer)
解决方案
range()
用于获取数字序列。例如,如果您给出range(10)
,它将给出从 0 到 9 的数字。
在这里,当您使用range
时,您计算的数字错误,最后-1
返回默认值。
在 中enumerate()
,它从列表中返回索引和实际元素。
顺便说一句,如果您使用 VS Code 进行编程,请使用调试功能。这将有助于更快地识别此类问题。
推荐阅读
- json - 将 cloudformation 模板移植到 terraform
- html - 渐变叠加与背景图像
- android - 如何(在运行时)确定 TensorFlow Lite 是否使用 GPU?
- reactjs - 将 Material UI 与 Storybook(和 makeStyles)一起使用
- android - Android 数据库(房间)在应用程序更新后不更新
- php - codeigniter 4,更新模型
- angular - Angular 构建无法解析材质模块
- android - 如何使回收站视图可滚动
- javascript - 使用过滤器和长度等高阶函数的 JavaScript 多维数组
- reactjs - 为什么用其他初始化数组,导致其他数组改变