为什么我不能附加一个由split()组成的列表?

时间:2017-11-21 23:19:35

标签: python list split append

v = ('* '*5).split()
print v, len(v), type(v)
print v.append(5)

输出:

['*', '*', '*', '*', '*'] 5 <type 'list'>
None

为什么尝试追加v导致输出为None?如图所示,v是长度为5的列表类型,但仍然附加似乎不起作用。

我可以做什么来附加到v?

我的确切情况

我有一份清单清单:

m = [[1, 2, 3, 4],[5, 6, 7, 8],[1, 2, 3, 4]]
m.append(('* '*5).split().append(" "))

这不会起作用,因为我试图将无添加到m。

如何返回此附加列表而不是打印它,以便返回列表而不是None?

3 个答案:

答案 0 :(得分:1)

在您的示例中,您将打印list.append的返回值,但此方法不会返回值。 append manipulates the original copy of the list。它不会创建新列表或返回列表。

因此,您需要先进行追加,然后打印新列表。

v = ('* '*5).split()
print v, len(v), type(v)
v.append(5)
print v

您的代码附加到v,但您需要先在两个单独的语句中附加,然后打印。

在这种情况下,了解“可变”之间的差异可能会有所帮助。和&#39;一成不变的&#39;类型。可变类型是指您可以在适当位置修改的类型,包括整数,列表和词典。使用列表和词典时,您可以使用appendupdate方法添加新元素,从而对其进行修改。这些方法不需要返回新对象,因为它们直接改变了与之关联的对象。

但是,字符串表示不可变类型。每当为字符串赋值时,每次都会创建一个全新的字符串对象。这就是为什么字符串没有附加&#39;方法

答案 1 :(得分:0)

append更改列表到位。在python中的一个约定是,就地编辑的方法返回None

所以你看到的是追加操作的回归。如果您之后打印列表,您将看到更改。

答案 2 :(得分:-1)

list.append改变列表(更改是就地执行的)并返回None。打印v以查看更改。

>>> v = ('* '*5).split()
>>> v.append(5)
>>> print v
['*', '*', '*', '*', '*', 5]