python - python 中的列表扩展

标签 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 的最后一个语句?
为什么它在 In[8] 输入中返回 None (而从 In[7] 我们可以看到所有内容都是相同的)???
所以我总是必须创建range实例来扩展它???

来自Python文档;我发现this ;但我不明白上述情况是如何发生的。

最佳答案

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

就地修改表示您正在调用其方法的对象将在该方法执行期间对其自身进行更改。在大多数情况下(为了避免您当前遇到的困惑)这些类型的操作不会返回执行该操作的对象(尽管也有异常(exception))。考虑以下因素:

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。这是打印出来的。

关于python - python 中的列表扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189927/

相关文章:

python - 加权线性回归 - R 到 Python - Statsmodels

python - QThread 到 QProcesses 的信号/槽

Python/机器学习 : Can I combine several prediction models into one

c - C 中的指针和链表——程序的意外行为

python - 如何检查变量是否为具有 python 2 和 3 兼容性的字符串

python - 如何将不同的应用程序合并到一个网页中?

python - 根据另一个列表中的值重复的连续数字列表

python - CSV 到字典列表 - 更好的方法?

c# - 如何检索列表中下一个更高的数字?

c# - 根据列表中的特定列值选择不同的行