Python extend 和 append 的区别
在python中,关于list添加元素的操作有两个方法,即extend和append。但两者的用法还是存在一些区别:
1.append可以添加单个元素,也可以添加可迭代对象,但是extend只能添加可迭代对象:
arr = [1,2,3,4] In [155]: arr.append(5) In [156]: arr Out[156]: [1, 2, 3, 4, 5] In [157]: arr_1 = [1,2,3,4] In [158]: arr_1.extend(5) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-158-a5e15af180e0> in <module>() ----> 1 arr_1.extend(5) TypeError: 'int' object is not iterable
2.在添加可迭代对象是,append在添加后不改变添加项的类型,添加之前是什么类型,添加之后就是什么类型;而extend在添加后,会将添加项进行迭代,迭代的元素挨个添加到被添加的数组中:
arr_ap = [1,2,3,4] item = [5,6,7] arr_ap.append(item) In [160]: arr_ap Out[160]: [1, 2, 3, 4, [5, 6, 7]] In [161]: arr_ex = [1,2,3,4] item = [5,6,7] arr_ex.extend(item) In [162]: arr_ex Out[162]: [1, 2, 3, 4, 5, 6, 7]
用一个更具体的栗子,使用递归迭代置换一个数组,使用同样的算法,变的只是添加元素的时候,分别用append和extend,大家应该可以从打印的结果看出明显的区别了:
使用append:
def testF1(n): a = [] i = 0 val = n[i] del n[i] a.append(val) if len(n) != 0: i + 1 a.append(testF1(n)) else: print('end') return a In [164]: c = testF1([3,2,5,1]) c end Out[164]: [3, [2, [5, [1]]]]
使用extend:
def testF1(n): a = [] i = 0 val = n[i] del n[i] a.append(val) if len(n) != 0: i + 1 a.extend(testF1(n)) else: print('end') return a In [166]: c = testF1([3,2,5,1]) c end Out[166]: [3, 2, 5, 1]