为了账号安全,请及时绑定邮箱和手机立即绑定

list怎么就超出范围了?代码很短的

list怎么就超出范围了?代码很短的

无无法师 2016-10-21 14:46:12
我的fs[i-1]根据我的估计,在循环过程中会产生fs[0],fs[1],fs[2]这三个数,不会超呀??哪位大侠帮忙看看,代码很短的# -*- coding: utf-8 -*- def count():     fs = []     for i in range(1, 4):         def f():             return i*i         fs[i-1]=f()         #fs.append(f(i))     return fs f1, f2, f3 = count() print f1, f2, f3
查看完整描述

4 回答

已采纳
?
Iamxiaoq

TA贡献33条经验 获得超6个赞

题主是不是js写多了呢?我记得js里的数值可以直接对数组任何一个索引赋值。Python的list是不具备这样的特性的。

l = [] # len(l)==0 l的长度为0,里面不存在任何元素,此时若l[0]会引发索引越界异常,这个应该不难理解
l[0] = 0 # 这也会引发越界异常,因为l[0]是不存在的,不能对其进行赋值,Python不像js那样若不存在就给你创建,而是抛出异常
l.append(0) # ok


查看完整回答
反对 回复 2016-10-22
?
芦荟酸奶

TA贡献4条经验 获得超0个赞

count = [i*i for i in range(1,4)]
f1,f2,f3 =count
print f1,f2,f3

这样可读性更好

查看完整回答
反对 回复 2016-10-24
?
孤独的小猪

TA贡献232条经验 获得超302个赞

正确代码应该是
def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():        
                return j * j 
            return g
        r = f(i)
        fs.append(r)
    return fs

f1, f2, f3 = count()
print f1(), f2(), f3()

建议你仔细看看python闭包知识,http://www.imooc.com/code/6059。

查看完整回答
反对 回复 2016-10-21
  • 无无法师
    无无法师
    学过那节,返回三个9我能理解,不懂的是为啥这样写list就超了
  • 孤独的小猪
    孤独的小猪
    那个 fs[i-1]=f(),这句就出问题了。你试试在python界面里敲这个例子: a = [] a[0] = 1 你就会发现报错和你这个一样,因为没有这种写法。
?
檸檬

TA贡献1条经验 获得超0个赞

def count():

    fs = []

    for i in range(1, 4):

        fs.append(i*i)

    return fs

f1, f2, f3 = count()

print (f1, f2, f3)

直接这样就好了

查看完整回答
反对 回复 2016-10-21
  • 4 回答
  • 0 关注
  • 3529 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信