我想做这样的事情:
myList = [10,20,30]
yourList = myList.append (40)
不幸的是,列表追加未返回修改后的列表。
那么,我如何允许append
返回新列表?
Answers:
不要使用追加而是串联:
yourList = myList + [40]
这将返回一个新列表。myList
不会受到影响。如果你需要有myList
受影响的还有既可以使用.append()
,无论如何,然后分配yourList
分开(复印件)myList
。
list.append
是命令,而不是查询。
在python 3中,您可以通过解压缩旧列表并添加新元素来创建新列表:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
当您这样做时:
myList + [40]
您实际上有3个列表。
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]
当然,这样做的缺点是创建新列表所花费的时间比 append
希望这可以帮助
您可以将内置列表类型作为子类,然后重新定义“ append”方法。甚至更好的做法是,创建一个新的文件,该文件将执行您想要的操作。下面是重新定义的“ append”方法的代码。
#!/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()
希望能有所帮助。
只是为了扩展Storstamp的答案
您只需要做myList.append(40)
它将添加到原始列表,现在您可以返回包含原始列表的变量。
如果要处理非常大的列表,这是一种方法。
append()
返回None
而不是返回相同列表的理由是什么?它会违反哪个禅宗原则?