Python - 直接扩展列表会导致无,为啥?

Posted

技术标签:

【中文标题】Python - 直接扩展列表会导致无,为啥?【英文标题】:Python - Extending a list directly results in None, why?Python - 直接扩展列表会导致无,为什么? 【发布时间】:2014-03-30 19:37:55 【问题描述】:
x=[1,2,3]
x.extend('a')

输出:

x is [1,2,3,'a']

但是当我执行以下操作时:

[1,2,3].extend('a')

输出:

None

为什么extend 对列表引用起作用,但对列表不起作用?

第二部分:

我发现这个是因为我试图将 listB 附加到 listA,同时尝试将 listC 扩展到 listB。

listA.append([listB[15:18].extend(listC[3:12])])

假设列表不能直接附加/扩展。解决此问题的最流行的表单解决方法是什么?

【问题讨论】:

None 是 print 语句的输出,如果您使用的是print [1,2,3].extend('a')。因为extend 的返回类型是None Python 中的约定是,改变序列的方法返回None。更多here. 【参考方案1】:

list.extend 就地修改列表并且不返回任何内容,从而导致None。在第二种情况下,它是一个正在扩展的临时列表,在该行之后立即消失,而在第一种情况下,它可以通过x 引用。

在尝试将 listC 扩展到 listB 时将 listB 附加到 listA。

您可能想试试这个,而不是使用extend

listA.append(listB[15:18] + listC[3:12])

如果您想实际修改listBlistC,请使用extend 在多个简单的行中执行此操作。

【讨论】:

【参考方案2】:

extend 将自行扩展列表。该方法的返回类型为None

如果你想union2 列出并将该列表添加到另一个列表中,那么你必须使用另一种方式添加。

listB[15:18] = listC[3:12]
listA.extend(listB)

【讨论】:

以上是关于Python - 直接扩展列表会导致无,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 '.sort()' 导致列表在 Python 中为 'None'? [复制]

为啥在将项目附加到现有列表时会得到“无”项目? [复制]

为啥排序列表返回无? [复制]

为啥我的游戏手柄时间戳列表减少会导致 NaN?

为啥初始化列表中的元素数量会导致模棱两可的调用错误?

为啥使用 BeautifulSoup find_all 方法会导致错误(列表索引超出范围)?