许多Python的列表方法在原地运行并返回None
(关闭我的头顶,insert
,sort
,reverse
)。列表分配去了哪里?
但是,有一种行为经常使我感到挫折。如果我创建一个新的列表,通常会返回一个对象,并在同一时间将其插入,新名单“消失”:
mytup = (0, 1, 2, 3, 4)
print mytup # (0, 1, 2, 3, 4)
mylist = list(mytup)
print mylist # [0, 1, 2, 3, 4]
newlist = list(mytup).insert(0, 10)
print newlist # None
所以,如果我想修改一个元组,它需要更多的线路:
newlist = list(mytup)
newlist.insert(0, 10)
print newlist # [10, 0, 1, 2, 3, 4]
所以我有两个问题:
- 它是正确的说,当我调用列表的构造函数,它返回的对象,但是当我打电话列表构造函数的方法就可以了,该方法使用0123“覆盖”返回?再次,名单去?
- 有没有办法插入一个元组并返回一行中的列表?我不是想打代码高尔夫,我只是不认为这两条线在逻辑上是不同的,不值得分离。
我认为将它们放在一行上将是一个坏主意。他们是单独的操作,为什么试图将它们塞进一行? – 2013-04-20 14:45:26
在我的脑海里,我有一个序列,我想修改它。如果它是一个列表,我可以直接插入。但它恰好是我自己的错误的一个元组,所以我必须使用两行代码?它减缓了我的思维过程。我认为这是列表和元组在许多情况下具有类似行为的结果。 – Lenna 2013-04-20 14:58:35
它不会“覆盖”返回值。发生什么事是,当你做'list(...)。insert(...)'你实际上在调用新创建列表的方法,你不再要求构造函数的结果。当然,这个方法返回'None'。 – ubik 2013-04-20 15:00:15