我想要做这样的事情:允许Python列表append方法返回新的列表
myList = [10,20,30]
yourList = myList.append (40)
不幸的是,名单追加不返回修改后的列表。
所以,我怎样才能让append
返回新的列表?
我想要做这样的事情:允许Python列表append方法返回新的列表
myList = [10,20,30]
yourList = myList.append (40)
不幸的是,名单追加不返回修改后的列表。
所以,我怎样才能让append
返回新的列表?
不要追加,但连接而不是:
yourList = myList + [40]
这将返回一个新列表; myList
不会受到影响。如果您需要myList
受影响以及无论如何都使用.append()
,然后分别从myList
(的副本)分配yourList
。
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
希望这有助于
但内置的可以被子类,然后怎么都行:) –
@MarcinWyszynski:是的,但他们只能在子类中进行修改。内置对象/类的内置方法很少会被覆盖,如果有的话 – inspectorG4dget
为了您自己的理智和同事的理智,您永远不应该这样做:) –
你只需要做 myList.append(40)
将其追加到原来的列表,而不是返回一个新的列表。
你也可以继承内置列表类型,并重新定义了“追加”的方法。或者甚至更好,创建一个新的,它将做你想做的事情。以下是重新定义的“附加”方法的代码。
#!/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()
希望有所帮助。
尝试使用itertools.chain(myList, [40])
。这将按顺序返回一个生成器,而不是分配一个新列表。从本质上讲,返回所有来自第一迭代的元素,直到它耗尽,然后前进到下一个迭代,直到所有的iterables的耗尽。
只是对Storstamp的答案扩大
你只需要做 myList.append(40)
将其追加到最初的名单,现在你可以返回一个包含原始列表中的变量。
如果您正在使用非常大名单的工作,这是要走的路。
在Python 3中,你可以通过拆包旧的和添加新的元素创建新的列表:
a = [1,2,3]
b = [*a,4] // b = [1,2,3,4]
当你这样做:
myList + [40]
你确实有3名名单。
会是怎样被身后'的append()''返回的None'理,而不是同一个列表?它会违反哪个禅宗原则? –
@CiprianTomoiaga:见https://en.wikipedia.org/wiki/Command%E2%80%93query_separation; 'list.append'是一个命令,而不是查询。 –
@CiprianTomoiaga:另见[这封电子邮件来自Python BDFL](https://mail.python.org/pipermail/python-dev/2003-October/038855.html)。 –