- 主题:才开始学python,关于列表,有个小疑惑
对列表项的增添,列表对象本身有个函数叫做append的,为什么删除列表项,没有一个对应的函数dele之类的,而是用外部dele语句来做到呢?作为一个面向对象的语言,为啥不能把对自身的操作都封装在对象内部?
比如:
>>> mylist=[1,2,3]
>>> mylist
[1, 2, 3]
>>> mylist.append (6)
>>> mylist
[1, 2, 3, 6]
>>> del mylist[2]
>>> mylist
[1, 2, 6]
删除列表项时,为什么不能搞成类似下面这样:
mylist.delete(2)
--
修改:tigereal FROM 219.155.76.*
FROM 219.155.76.*
有的,remove或者pop方法
--
修改:freesand FROM 223.104.246.*
FROM 223.104.246.*
谢谢了!刚才看了一下,remove是相当于搜索“值”来删除的,pop就相当于真的按照索引删除。
不过它为啥不把append改名push,那就正好和pop不仅是功能,而且从名称上都对应起来了....
【 在 freesand 的大作中提到: 】
: 有的,remove或者pop方法
--
FROM 219.155.76.*
因为 list 的名字是 list 而不是 stack, 做 stack 只是一点兼职。
也有一些程序语言把 pop() 写成 take() 好像更贴切。
【 在 tigereal (tigereal) 的大作中提到: 】
: 谢谢了!刚才看了一下,remove是相当于搜索“值”来删除的,pop就相当于真的按照索引删除。
: 不过它为啥不把append改名push,那就正好和pop不仅是功能,而且从名称上都对应起来了....
--
修改:hgoldfish FROM 112.47.93.*
FROM 112.47.93.*
因为所有list like这一类都有通用的slice操作,
del mylst[5]只是其中最简单的一类
你还可以del mylst[5:10]
你也可以mylst[5:10]=[5,4,3,2,1]来替换,
你还可以mylst[5:5]=[1,2,3,4,5]在这个位置插入
所以并不是list有这些方法,而是有一堆通用的操作可以作用在list like object之
上,list只是其中之一而已。
至于list自身提供的append和pop,你可以认为只是一种简化和提升可读性的alias。
而且pop严格的说并不对应delete,只是其中的副作用包括了delete而已。另外push和
pop是对应压栈出栈的术语,所以push也并不能等于append,两者意思完全不同。
对list来说,一个pop在首取数据,一个append在尾部添数据,这是典型的队列操作,
对应list这个名字。至于pop/push,这对应的是stack。
【 在 tigereal (tigereal) 的大作中提到: 】
: 对列表项的增添,列表对象本身有个函数叫做append的,为什么删除列表项,没有一
个对应的函数dele之类的,而是用外部dele语句来做到呢?作为一个面向对象的语言,
为啥不能把对自身的操作都封装在对象内部?
: 比如:
: >>> mylist=[1,2,3]
: ...................
--
修改:lvsoft FROM 101.81.86.*
FROM 101.81.86.*
你中OOP的毒太深了,已经无药可医。看你是千年难得一遇的武学奇才,
来,少年,我这有一本武林秘籍,便宜点卖给你,……………………
【 在 tigereal 的大作中提到: 】
: 对列表项的增添,列表对象本身有个函数叫做append的,为什么删除列表项,没有一个对应的函数dele之类的,而是用外部dele语句来做到呢?作为一个面向对象的语言,为啥不能把对自身的操作都封装在对象内部?
: 比如:
:
: ...................
--
FROM 210.22.179.*
有remove有pop就够了
--
FROM 82.19.154.*
谢谢回复!明白了!
【 在 lvsoft 的大作中提到: 】
: 因为所有list like这一类都有通用的slice操作,
: del mylst[5]只是其中最简单的一类
: 你还可以del mylst[5:10]
: ...................
--
FROM 219.155.76.*
555那也得医啊,当初我确实被OOP给深深吸引过,现在悔之晚矣!
【 在 Madlee 的大作中提到: 】
: 你中OOP的毒太深了,已经无药可医。看你是千年难得一遇的武学奇才,
: 来,少年,我这有一本武林秘籍,便宜点卖给你,……………………
:
--
FROM 219.155.76.*
del和.只是两种语法,最终都是由对象的类来实现,没有什么一种是“外部”而一种是“内部”的说法。再怎么“OO”的语言也要允许你写1+2而不是非得1.add(2),也没有说写成前者就破坏封装了。两者只是方法调用的两种语法而已。
【 在 tigereal 的大作中提到: 】
: 对列表项的增添,列表对象本身有个函数叫做append的,为什么删除列表项,没有一个对应的函数dele之类的,而是用外部dele语句来做到呢?作为一个面向对象的语言,为啥不能把对自身的操作都封装在对象内部?
: 比如:
:
: ...................
--
FROM 140.207.23.*