Python LIST 函数不返回新列表

标签 python list

我在考虑内置 Python 列表方法时遇到问题。

在我学习 Python 的过程中,我一直认为 Python 的修改器,就像任何值类修改器应该做的那样,返回它创建的新变量。

举个例子:

a = range(5)
# will give [0, 1, 2, 3, 4]
b = a.remove(1)
# as I learned it, b should now be [0, 2, 3, 4]
# what actually happens:
# a = [0, 2, 3, 4]
# b = None

这个列表修改器不返回新列表的主要问题是你不能随后进行多个修改。 假设我想要一个范围从 0 到 5 的列表,没有 2 和 3。 返回新变量的修改器应该能够像这样执行:

a = range(5).remove(2).remove(3)

很遗憾,这是不可能的,因为 range(5).remove(2) = None

现在,有没有办法像我想在我的示例中那样实际对列表进行多个突变?我认为甚至 PHP 也允许使用字符串进行这些类型的后续突变。

我也找不到关于所有内置 Python 函数的好引用。如果有人能找到所有列表修改器方法的实际定义(带有返回值),请告诉我。我只能找到这个页面:http://docs.python.org/tutorial/datastructures.html

最佳答案

Python 库没有选择同时改变和返回对象,而是选择只有一种方法来使用改变器的结果。从导入这个:

There should be one-- and preferably only one --obvious way to do it.

话虽如此,对于您想要做的事情,更常用的 Python 风格是使用列表理解生成器表达式:

[x for x in range(5) if x != 2 and x != 3]

您还可以将它们链接在一起:

>>> [x for x in (x for x in range(5) if x != 2) if x != 3]
[0, 1, 4]

上面的生成器表达式还有一个额外的好处,就是它在 O(n) 时间内运行,因为 Python 只迭代 range() 一次。对于大型生成器表达式,甚至对于无限 生成器表达式,这是有利的。

关于Python LIST 函数不返回新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983254/

相关文章:

python - 计算重复列表的频率 - 在列表列表中

python - 训练Tensorflow时出现ValueError : setting an array element with a sequence

python - 编写一个函数,当函数参数是列表的值时,该函数返回列表中项目的索引

python - 用 Python turtle 绘制更快的圆圈

python - 在列表理解中递增 defaultdict (Python)

python - 在 python 中使用名称列表打开多个文件

python - 在列表中查找并计算相等的字典

python - 根据索引将Python列表拆分为多个列表

python - Python 中的标志是什么?

python - 在python中为任何对象创建无穷大和负无穷大