【问题标题】:Why can't I append a list formed from split()? [duplicate]为什么我不能附加从 split() 形成的列表? [复制]
【发布时间】:2018-05-05 13:56:02
【问题描述】:
v = ('* '*5).split()
print v, len(v), type(v)
print v.append(5)

输出:

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

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

我可以做些什么来追加到 v?

我的具体情况

我有一个列表列表:

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

这不起作用,因为我正在尝试将 None 附加到 m。

我怎样才能返回这个附加列表而不是打印它,以便我返回列表而不是 None?

【问题讨论】:

标签: python list split append


【解决方案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,但您需要先附加,然后在两个单独的语句中打印。

在这种情况下,了解“可变”和“不可变”类型之间的区别可能会有所帮助。可变类型是您可以就地修改的类型,包括整数、列表和字典等内容。使用列表和字典时,您可以通过使用appendupdate 方法添加新元素来修改它们。这些方法不需要返回新对象,因为它们直接改变了它们关联的对象。

但是,字符串表示不可变类型。每当您为字符串赋值时,您每次都会创建一个全新的字符串对象。这就是字符串没有“追加”方法的原因。

【讨论】:

  • 您能看一下我在问题末尾添加的内容吗?
  • 您可以使用另一个变量或使用列表连接而不是附加
  • 太好了,谢谢。 @geckos 在这种情况下如何使用列表连接来执行相同的操作? (不幸的是,我不能使用另一个变量,因为它会在我的代码中导致额外的问题。)
  • @ODP 几乎可以肯定,它不会。做你想做的事情的正确方法是保存到一些临时变量,my_temp_var = ('* '*5).split(),然后使用my_temp_var.append(&lt;whatever&gt;),最后,m.append(my_temp_var)
  • @juanpa.arrivillaga 在我的代码中运行良好。非常感谢
【解决方案2】:

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

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

【讨论】:

  • 你能看一下我在问题末尾添加的内容吗?
【解决方案3】:

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

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

【讨论】:

  • 好的,谢谢。因此,在这种情况下,在一些代码的中间,我想在附加一个空格而不是问题中演示的“$ * $”之后返回有问题的字符串。所以我需要返回附加列表,而不是打印它。如果我做不到 ('* '*5).split().append(" ") (因为这只是返回 None),那我该怎么办?
  • 函数内的@ODP,如果你希望函数返回列表,请使用return v而不是print v
  • 我在我的问题中添加了更多内容
猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2013-09-10
  • 2021-01-06
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多