|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
对于列表而言,想要增加列表的内容,在基本操作中有list.append(x):将某个元素x追加到已知的一个列表的尾部,list_1.extend(list_2):将list_1和list_2两个列表合并。
>>> list_1 = ['orange','pear']
>>> x = 'apple'
>>> list_1.append(x)
>>> list_1
['orange', 'pear', 'apple']
--------------------------------------分割线
>>> list_1 = ['orange','pear']
>>> list_2 = ['yellow','white']
>>> list_1.extend(list_2)
>>> list_1
['orange', 'pear', 'yellow', 'white']
然而,当我们用extend添加单独str时,会出现以下情况:
>>> list_1 = ['orange', 'pear']
>>> a_1 = 'abc'
>>> list_1.extend(a_1)
>>> list_1
['orange', 'pear', 'a', 'b', 'c']
>>> list_1 = ['orange', 'pear']
>>> b_1 = 8
>>> list_1.extend(b_1)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
list_1.extend(b_1)
TypeError: 'int' object is not iterable
[/code]
对,你没看错,extend会把'abc'拆开成单个字母进行导入,而且,当年试图去向列表增加一个int数据的时候,系统报错了,这是怎么回事呢
在我们看了官方文档之后,发现,使用extend内置函数将另外的元素增加到一个已知的列表的时候,元素必须是iterable
注:iterable:可迭代的
也就是说,某些类型的对象是“可迭代(iterable)”,只有这样的对象,才能使用extend进行添加列表
这里,我们使用hasattr()来判断一个字符串是否可迭代
>>> list_1 = ['a','b']
>>> hasattr(list_1,'__iter__')
True
>>> hasattr(8,'__iter__')
False
>>> a_1 = 'abc'
>>> hasattr(a_1,'__iter__')
True
从上面的演示来看,列表经过extend函数操作过之后,内容增加了,仿佛变成了一个新的列表
>>> list_1 = ['a','b']
>>> id(list_1)
2003549801736
>>> list_2 = ['c','d']
>>> id(list_2)
2003549800904
使用id()查看上面两个列表在内存中编号
>>> list_1.extend(list_2)
>>> list_1
['a', 'b', 'c', 'd']
>>> id(list_1)
2003549801736
这里我们可以发现,尽管经过增容,list_1在内存中的编号依然没有变,也就是说,经过extend函数之后,列表还是那个列表,不会因为内容增加了就变了本质。
那么对于append()来说,是不是这样呢
>>> list_1 = ['a','b']
>>> id(list_1)
2003549801736
>>> b_1 = ['python','google']
>>> list_1.append(b_1)
>>> list_1
['a', 'b', 'c', 'd', ['python', 'google']]
>>> id(list_1)
2003549801736
可见,对于append来说,改变列表内容之后,它的内存编号依然没有变化。
那么两者的区别在哪呢
>>> list_1 = ['a','b','c']
>>> list_1.append(['python','google'])
>>> list_1
['a', 'b', 'c', ['python', 'google']] #append的结果
>>> len(list_1)
4
>>> list_1 = ['a','b','c']
>>> list_1.extend(['python','google'])
>>> list_1
['a', 'b', 'c', 'python', 'google'] #extend的结果
>>> len(list_1)
5
可以看出两者在为列表增加内容方面存在显著性差异
append是整建制的增加,extend是个体化的扩编
|
评分
-
查看全部评分
|