允许Python list append方法返回新列表

问题描述 投票:48回答:7

我想做这样的事情:

myList = [10,20,30]
yourList = myList.append (40)

不幸的是,list append不会返回修改后的列表。

那么,我怎样才能让append返回新列表呢?

python list append
7个回答
87
投票

不要使用追加而是连接:

yourList = myList + [40]

这会返回一个新列表; myList不会受到影响。如果你需要让myList受影响,或者使用.append()无论如何,然后分配yourList(qartxswpoi的副本)。


9
投票

在python 3中,您可以通过解压旧的并添加新元素来创建新列表:

myList

当你这样做时:

a = [1,2,3]
b = [*a,4] // b = [1,2,3,4] 

你实际上有3个列表。


6
投票

myList + [40] 是内置的,因此无法更改。但如果你愿意使用list.append以外的东西,你可以试试append

+

当然,这样做的缺点是创建了一个比In [106]: myList = [10,20,30] In [107]: yourList = myList + [40] In [108]: print myList [10, 20, 30] In [109]: print yourList [10, 20, 30, 40] 花费更多时间的新列表

希望这可以帮助


2
投票

您可以子类化内置列表类型并重新定义'append'方法。或者甚至更好,创建一个新的,它将做你想要它做的事情。下面是重新定义的'append'方法的代码。

append

希望有所帮助。


1
投票

尝试使用#!/usr/bin/env python class MyList(list): def append(self, element): return MyList(self + [element]) def main(): l = MyList() l1 = l.append(1) l2 = l1.append(2) l3 = l2.append(3) print "Original list: %s, type %s" % (l, l.__class__.__name__) print "List 1: %s, type %s" % (l1, l1.__class__.__name__) print "List 2: %s, type %s" % (l2, l2.__class__.__name__) print "List 3: %s, type %s" % (l3, l3.__class__.__name__) if __name__ == '__main__': main() 。这会将生成器作为序列返回,而不是分配新列表。本质上,它返回第一个iterable中的所有元素,直到它耗尽,然后进入下一个iterable,直到所有的iterables都用完为止。


0
投票

只是为了扩展Storstamp的答案

你只需要做myList.append(40)

它会将其附加到原始列表,现在您可以返回包含原始列表的变量。

如果您正在处理非常大的列表,那么这是可行的方法。


-1
投票

你只需要做myList.append(40)

它会将其附加到原始列表,而不是返回新列表。

© www.soinside.com 2019 - 2024. All rights reserved.