函数式追加/扩展

12 投票
2 回答
5822 浏览
提问于 2025-04-16 13:44

在Python中,appendextend这两个方法本身并不是功能性的,它们会直接修改原来的列表,并且返回的结果是None

有没有其他方法可以实现这两个方法的功能,并且返回一个新的列表呢?

看看这个例子:

def myfun(first, *args):
  for elem in [first].extend(args):
    print elem

显然,这样做是行不通的。

有没有办法直接用一个表达式来构造一个新的列表,而不是非得写下面这样的代码呢?

def myfun(first, *args):
   all_args = list(first)
   all_args.extend(args)

   for elem in all_args:
     print elem

谢谢。

2 个回答

7

你可以把它改写成:

[first] + args
14
>>> def append(lst, elem):
...     return lst + [elem]
... 
>>> append([1, 2, 3], 4)
[1, 2, 3, 4]
>>> def extend(lst1, lst2):
...   return lst1 + lst2
... 
>>> extend([1, 2], [3, 4])
[1, 2, 3, 4]

这就是你想要的吗?

你还可以定义自己的类型,这样在这些操作中除了可以改变它,还能返回这个列表本身:

>>> class MyList(list):
...   def append(self, x):
...     super(MyList, self).append(x)
...     return self
...   def extend(self, lst):
...     super(MyList, self).extend(lst)
...     return self
... 
>>> l = MyList([1, 2, 3])
>>> l.append(4)
[1, 2, 3, 4]
>>> l.extend([5, 6, 7])
[1, 2, 3, 4, 5, 6, 7]
>>> l
[1, 2, 3, 4, 5, 6, 7]

撰写回答