关于Python for i in range(n)循环遍历时间复杂度是O(n)还是O(2n)理解

        Python近年来非常火,特别是数据挖掘和机器学习领域。

        对于由C/C++语言等比较看重时间复杂度的语言(毕竟是用于编写底层的)学习过来的人,当然在Python使用中会注意到时间复杂度的问题。

        最近在使用for循环就想到了一个问题:
        从0遍历到n(不包括n)我们都会写:
Python:

for i in range(n):

C:

for(int i = 0;i <n;i++){}

        那么它们的时间复杂度会不会不同,毕竟上面Python的有个range(n)而下面的C代码是一个确定的变量n;换句话说就是for遍历时range(n)是不是产生一个列表然后给i遍历,时间复杂度会不会变成O(2n)而不是C/C++的O(n)?

        后来在菜鸟教程查到了range()函数的介绍:

  • “Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。”所以并不会额外产生O(n)的时间
  • Python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
  • Python2 range() 函数返回的是列表。

        故for i in range(n)循环遍历时间复杂度是O(n),因为range(n)并不会产生所谓“用于遍历的列表”而耗时。

        另外如果有其他意见欢迎讨论和指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值