Python:为什么内联分配列表值会返回 "None"元素的列表?

标签 python list

我对Python还是个新手,我一直在制作一个小函数来反转列表列表,包括原始列表和内部列表。这是我的代码:

def deep_reverse(L):
    L.reverse()
    L = [i.reverse() for i in L]

现在这段代码可以完美运行,但是如果我做一个小的更改并重新排列行,如下所示:

def deep_reverse(L):
    L = [i.reverse() for i in L]
    L.reverse()

突然就停止工作了!它仅反转内部列表,而不反转原始列表。将一些调试 print() 语句放入其中,我可以看到第一个代码在第一行之后反转了原始列表并打印了它,但第二个代码在反转列表后实际上打印了一个包含“None”作为元素的列表。谁能解释一下为什么会出现这种行为以及这两个代码之间有什么区别?

最佳答案

reverse() 函数就地反转列表并返回 None,这解释了奇怪的行为。正确的实现是:

def deep_reverse(L):
  ans = [i[::-1] for i in L]
  ans.reverse()
  return ans

此外,重新分配和/或改变函数的参数是一个坏主意,它可能会导致意外的结果。有时,标准库中的函数出于效率原因(例如,sort()reverse())这样做,没关系 - 但它可能会导致困惑,例如一个你刚刚经历过的。除非绝对必要,否则您的代码不必以这种方式编写。

关于Python:为什么内联分配列表值会返回 "None"元素的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092656/

相关文章:

python - 使用不同格式的正则表达式提取电话号码python

python - 通过索引查找列表项

python - 跳过第一行的问题

list - 记录列表上的 SML 功能

Excel - 如何计算列表中的唯一天数和重复天数

python - 计算列表中连续元素的数量

python - 在使用 Keras LSTM 拟合和预测数据期间,如何使用不同大小的训练数据和测试数据以及不同的 batch_sizes?

python - 使用 Anaconda 安装 OSMnx

python - 将列表转换为 NumPy 数组

python - 在 virtualenv 中安装 Python-Dbus