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?
答案 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;类型。可变类型是指您可以在适当位置修改的类型,包括整数,列表和词典。使用列表和词典时,您可以使用append
或update
方法添加新元素,从而对其进行修改。这些方法不需要返回新对象,因为它们直接改变了与之关联的对象。
但是,字符串表示不可变类型。每当为字符串赋值时,每次都会创建一个全新的字符串对象。这就是为什么字符串没有附加&#39;方法
答案 1 :(得分:0)
append
更改列表到位。在python中的一个约定是,就地编辑的方法返回None
所以你看到的是追加操作的回归。如果您之后打印列表,您将看到更改。
答案 2 :(得分:-1)
list.append
改变列表(更改是就地执行的)并返回None
。打印v
以查看更改。
>>> v = ('* '*5).split()
>>> v.append(5)
>>> print v
['*', '*', '*', '*', '*', 5]