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

python中的list字符化

python中的list字符化

ApostleOne 2016-04-23 15:50:14
python进阶课程中class Fib(object):        def __init__(self, num):        a,b,L=0,1,[]        for n in range(num):            L.append(a)            a=b+a            b=a        self.numbers = L    def __str__(self):        return str(self.numbers)    __repr__=__str__    def __len__(self):        return len(self.numbers)f = Fib(10)print fprint len(f)这里为什么用 str(self.numbers),之后再使用len(self.numbers)来求得list中的元素个数?我在自己的平台试了一下a=[1,2,3,4,5]print len(a)b=str(a)print bprint len(b)输出的结果 5[1, 2, 3, 4, 5]15为什么最后一个不是5?按照@清波的解释,那为什么len(a)=5而不是15= =都是list,按照逗号后面加空格print len(a)也应该等于15吧
查看完整描述

3 回答

已采纳
?
小钱趣

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

因为a是一个list,实际a的内容只有1 2 3 4 5,print a 显示的是[1,2,3,4,5]的格式是为了告诉你它是一个list

但是b是一个字符串,因为b = str(a),是通过str函数获取的,他的实际内容就是[1, 2, 3, 4, 5]

题主可以下面的方式证明一下,就是通过list.append(6),在list末尾加入一个元素

//img1.sycdn.imooc.com//571d810e00011b4604610121.jpg

发现个b添加元素时,它告诉你b是str类型,不可以添加元素

但是a可以成功添加

所以a 和 b一个是list一个是str,虽然 print 时候看起来一样,但是实际内容是不一样的,长度也不相等

查看完整回答
反对 回复 2016-04-25
?
清波

TA贡献165条经验 获得超90个赞

呃, 因为 a 是列表, 而b 是字符串, 所以 len(a) 返回的是 列表元素的个数。

查看完整回答
反对 回复 2016-04-24
?
清波

TA贡献165条经验 获得超90个赞

不做理论上的解释了, 类内部调用的时候自身属性的时候 需要 self.属性名 这样来调用。 至于最后两个方法,可以看做是对Python 内置函数的重写,虽然重写中并没与改变什么。

至于你自己测试的 len(5) 为什么等于15 , 这是因为 Python 默认给列表元素 的 每个逗号后面加上一个空格, 随意字符串后其实包含 5个数字,4个逗号,4个空格,2个方括号,5+4+4+2=15

查看完整回答
反对 回复 2016-04-23
  • 3 回答
  • 0 关注
  • 1627 浏览
慕课专栏
更多

添加回答

举报

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