鱼C论坛

 找回密码
 立即注册
查看: 1893|回复: 4

[已解决]请帮解释这个“len”是什么作用

[复制链接]
发表于 2021-1-17 23:54:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
nums = [2, 7, 11, 15]
target = 9

n = len(nums)
for i in range(n):
    for j in range(i+1, n):
        if nums[i] + nums[j] == target:
            print([i, j])
我记得len是查元素个数的啊,按我的意思n只是=4罢了,但是这是小甲鱼的课后作业答案,我没搞懂,请大神指点
最佳答案
2021-1-18 01:06:31
本帖最后由 jackz007 于 2021-1-18 01:16 编辑

        n = len(nums)  = 4 控制循环次数,索引列表元素
  1. for i in range(n):
复制代码

         这一句将使循环运行 4 次,i 的值将依次为 0、1、2、3。恰好可以索引到 nums 中的每个元素,你说它的作用重不重要?
  1. nums = [2, 7, 11, 15]
  2. target = 9

  3. n = len(nums)                            # n = 4,列表 nums 中的元素数量
  4. for i in range(n):                       # 从索引 0 开始,通过索引 i 向后遍历列表 nums 中的各个元素
  5.     for j in range(i + 1 , n):           # 从索引 i + 1 开始,通过索引 j 向后遍历列表 nums 中的各个元素,这样,i 与 j 永远不会相等。
  6.         if nums[i] + nums[j] == target:  # 如果当前枚举到的 nums 两个元素之和与目标数相等
  7.             print([i, j])                # 那就把它们打印出来
复制代码

        这个代码存在缺陷,当 i = n - 1 = len(nums) - 1 的时候,j = i + 1 = len(nums) , 这时,nums[j] 会下标越界的。
        必须把这一句改掉
  1. for i in range(n):      
复制代码

        改为
  1. for i in range(n - 1):
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 01:06:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-18 01:16 编辑

        n = len(nums)  = 4 控制循环次数,索引列表元素
  1. for i in range(n):
复制代码

         这一句将使循环运行 4 次,i 的值将依次为 0、1、2、3。恰好可以索引到 nums 中的每个元素,你说它的作用重不重要?
  1. nums = [2, 7, 11, 15]
  2. target = 9

  3. n = len(nums)                            # n = 4,列表 nums 中的元素数量
  4. for i in range(n):                       # 从索引 0 开始,通过索引 i 向后遍历列表 nums 中的各个元素
  5.     for j in range(i + 1 , n):           # 从索引 i + 1 开始,通过索引 j 向后遍历列表 nums 中的各个元素,这样,i 与 j 永远不会相等。
  6.         if nums[i] + nums[j] == target:  # 如果当前枚举到的 nums 两个元素之和与目标数相等
  7.             print([i, j])                # 那就把它们打印出来
复制代码

        这个代码存在缺陷,当 i = n - 1 = len(nums) - 1 的时候,j = i + 1 = len(nums) , 这时,nums[j] 会下标越界的。
        必须把这一句改掉
  1. for i in range(n):      
复制代码

        改为
  1. for i in range(n - 1):
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-18 09:03:38 | 显示全部楼层
你记忆的没错,
然后你带着解数学题的思路去把问题一个步骤一个步骤的想出来,在去看代码,就更好理解了。
如:  一个数组中,任意两个数相加等于target,详细描述步骤并显示出来。
解:  1.元素的第一个值和第二个值相加,是否等于target?
        2.元素的第一个值和第三个值相加,是否等于target?
然后在去看代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 09:37:59 | 显示全部楼层
本帖最后由 陈尚涵 于 2021-1-18 09:40 编辑

len就是个获取对象长度的呀! 等于object.__length__(也只有这个方法的对象才能用len获取长度        )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 09:42:24 | 显示全部楼层
len就是获取列表元素个数,你这个能看出来是4,但是如果下个列表是200呢?一个一个轻去数吗?而且列表有可能会在后期有添加元素或者移除元素的操作,如果是固定为某个值,将来在程序中重复执行(比如调用某一个函数)就会报错了,所以用len十分稳妥,更为准确。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 14:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表