如何允许 list append()方法返回新列表

我想这样做:

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

遗憾的是,list append 不返回修改后的列表。

那么,如何允许 append返回新列表呢?


参见: 为什么这些列表操作(方法)返回 Nothing,而不是返回结果列表?

94729 次浏览

不要使用 append 而是连接:

yourList = myList + [40]

这将返回一个 新的列表; myList不会受到影响。如果你需要让 myList影响到 我也是,无论如何都要使用 .append(),那么分配 yourList与(一份) myList分开。

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 (40)

它将把它追加到原始列表,而不返回新列表。

您可以子类化内置的列表类型并重新定义“ 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()

希望能帮上忙。

尝试使用 itertools.chain(myList, [40])。它将按序列返回生成器,而不是分配新列表。从本质上说,它返回第一个迭代中的所有元素,直到它用尽,然后继续到下一个迭代,直到所有的迭代都用尽。

只是为了进一步阐述斯托斯塔姆的答案

你只需要做 Append (40)

它将把它追加到原始列表中,现在您可以返回包含原始列表的变量。

如果您正在处理非常大的列表,这是一种方法。

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

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

当你这样做的时候:

myList + [40]

你实际上有三个名单。

不幸的是,这里没有一个答案能够准确地解决问题。下面是一个简单的方法:

lst = [1, 2, 3]
lst.append(4) or lst  # the returned value here would be the OP's `yourList`
# [1, 2, 3, 4]

有人可能会问这样做的真正需要,比如当某人需要改进 RAM 使用情况、做微基准测试等等,这些 通常都是无用的。然而,有时候有人真的是在“问我们问了什么”(我不知道这里是否是这种情况) ,事实比我们所知道的更加多样化。因此,这里有一个(人为的,因为脱离上下文)用法..。 而不是这样做:

dic = {"a": [1], "b": [2], "c": [3]}


key, val = "d", 4  # <- example
if key in dic:
dic[key].append(val)
else:
dic[key] = [val]
dic
#  {'a': [1], 'b': [2], 'c': [3], 'd': [4]}


key, val = "b", 5  # <- example
if key in dic:
dic[key].append(val)
else:
dic[key] = [val]
dic
#  {'a': [1], 'b': [2, 5], 'c': [3], 'd': [4]}

可以在任何需要表达式的地方(而不是语句)使用上面的 OR 表达式:

key, val = "d", 4  # <- example
dic[key] = dic[key].append(val) or dic[key] if key in dic else [val]
#  {'a': [1], 'b': [2], 'c': [3], 'd': [4]}


key, val = "b", 5  # <- example
dic[key] = dic[key].append(val) or dic[key] if key in dic else [val]
#  {'a': [1], 'b': [2, 5], 'c': [3], 'd': [4]}

或者,等价地,当列表中没有 假的值时,可以尝试以某种更好的方式使用 dic.get(key, <default value>)