python中的list字符化

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 f

print len(f)


这里为什么用 str(self.numbers),之后再使用len(self.numbers)来求得list中的元素个数?

我在自己的平台试了一下

a=[1,2,3,4,5]

print len(a)

b=str(a)

print b

print len(b)

输出的结果 

5

[1, 2, 3, 4, 5]

15

为什么最后一个不是5?


按照@清波的解释,那为什么len(a)=5而不是15= =都是list,按照逗号后面加空格print len(a)也应该等于15吧

ApostleOne
浏览 1628回答 3
3回答

小钱趣

因为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末尾加入一个元素发现个b添加元素时,它告诉你b是str类型,不可以添加元素但是a可以成功添加所以a 和 b一个是list一个是str,虽然 print 时候看起来一样,但是实际内容是不一样的,长度也不相等

清波

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

清波

不做理论上的解释了, 类内部调用的时候自身属性的时候 需要 self.属性名 这样来调用。 至于最后两个方法,可以看做是对Python 内置函数的重写,虽然重写中并没与改变什么。至于你自己测试的 len(5) 为什么等于15 , 这是因为 Python 默认给列表元素 的 每个逗号后面加上一个空格, 随意字符串后其实包含 5个数字,4个逗号,4个空格,2个方括号,5+4+4+2=15
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python