列表在python中扩展

时间:2013-01-07 04:35:34

标签: python list

我刚刚面对这种我无法理解的情况:

In [3]: nk1=range(10)

In [4]: nk2=range(11,15)

In [5]: nk1.extend(nk2)

In [6]: nk1
Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]

In [7]: dir(range(10))==dir(list)==dir(range(11,15))==dir(nk1)==dir(nk2)
Out[7]: True

In [8]: print range(10).extend(range(11,15))
None

正如你在上面看到的那样我可以很容易地扩展nk1,但为什么不能返回None的最后一个语句?
为什么它在None输入中返回In[8](从In[7]我们可以看到所有都相同)???
所以我总是要使range的实例扩展它吗?

来自python docs;我发现this;但我不知道上面的情况是怎么发生的。

2 个答案:

答案 0 :(得分:5)

扩展列表时,列表会就地修改。不会返回新列表。

就地修改表示您正在调用的方法将在该方法执行期间对其自身进行更改。在大多数情况下(为了避免您当前遇到的混淆),这些类型的操作不会返回执行操作的对象(尽管有例外)。请考虑以下事项:

list1 = range(10)
list2 = range(10) + range(11,15) # no in place modification here.
nolist1 = list1.extend(range(11,15)) # list1 is now (0 ... 14)
nolist2 = range(10).extend(range(11,15)) # Nothing actually happens here.

在最后一个示例中,range函数返回一个从未分配给任何内容的列表。然后扩展该列表,其结果是返回值None。打印出来。

答案 1 :(得分:0)

range()给出了新创建的列表的句柄。如果需要修改它,则必须将句柄存储到变量中。

不打印'无',因为extend不会返回任何内容。当您使用range()时,无法直接获得输出。

nk1 = range(10)
nk1.extend(range(11,15))
print nk1