代码之家  ›  专栏  ›  技术社区  ›  ODP

为什么我不能附加由split()形成的列表?[副本]

  •  -4
  • ODP  · 技术社区  · 7 年前
    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。

    如何返回这个附加列表而不是打印它,以便返回列表而不是无列表?

    3 回复  |  直到 7 年前
        1
  •  2
  •   smokes2345    7 年前

    在您的示例中,您正在打印 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,但需要先在两个单独的语句中附加,然后打印。

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

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

        2
  •  0
  •   geckos    7 年前

    append 更改列表 在正确的位置 . 是python中的一种约定,执行就地编辑的方法返回 None

    您看到的是追加操作的返回。如果你以后打印列表,你会看到变化。

        3
  •  -1
  •   timgeb    7 年前

    list.append 更改列表(更改在适当位置执行)并返回 None . 打印 v 为了看到变化。

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