首页 > 技术文章 > AttributeError: 'list' object has no attribute 'extends' && list详解

kaerxifa 2019-06-24 15:38 原文

拼写错误

是extend  而不是extends

出错demo:

1 In [27]: c = [2,3]                                                              
2 
3 In [28]: c.extends([5])                                                         
4 ---------------------------------------------------------------------------
5 AttributeError                            Traceback (most recent call last)
6 <ipython-input-28-2022e87158c8> in <module>
7 ----> 1 c.extends([5])
8 
9 AttributeError: 'list' object has no attribute 'extends'

调试:

既然错误提示说list对象没有extends这个属性,那我们可以先来看一下list的属性都有什么

通过第42行,就可以看到list有extend属性,而不是extends属性

这样就知道代码中的错误是 拼写错误

 1 In [29]: dir(list)                                                              
 2 Out[29]: 
 3 ['__add__',
 4  '__class__',
 5  '__contains__',
 6  '__delattr__',
 7  '__delitem__',
 8  '__dir__',
 9  '__doc__',
10  '__eq__',
11  '__format__',
12  '__ge__',
13  '__getattribute__',
14  '__getitem__',
15  '__gt__',
16  '__hash__',
17  '__iadd__',
18  '__imul__',
19  '__init__',
20  '__init_subclass__',
21  '__iter__',
22  '__le__',
23  '__len__',
24  '__lt__',
25  '__mul__',
26  '__ne__',
27  '__new__',
28  '__reduce__',
29  '__reduce_ex__',
30  '__repr__',
31  '__reversed__',
32  '__rmul__',
33  '__setattr__',
34  '__setitem__',
35  '__sizeof__',
36  '__str__',
37  '__subclasshook__',
38  'append',
39  'clear',
40  'copy',
41  'count',
42  'extend',
43  'index',
44  'insert',
45  'pop',
46  'remove',
47  'reverse',
48  'sort']

其它几个属性也演示一下吧

list.append(obj) 追加,是大家都很熟悉的list的属性。注意: 一次只能追加1个对象

In [33]: c = [2,3]                                                              

In [34]: c.append(4)                                                            

In [35]: c                                                                      
Out[35]: [2, 3, 4]

 

list.clear()清空整个列表

In [35]: c                                                                      
Out[35]: [2, 3, 4]

In [36]: c.clear()                                                              

In [37]: c                                                                      
Out[37]: []

 

list.copy()返回一个复制的列表

In [38]: c = [2,3]                                                              

In [39]: b = c.copy()                                                           

In [40]: b                                                                      
Out[40]: [2, 3]

 

list.count(obj)统计指定元素在列表中出现的次数

In [45]: c                                                                      
Out[45]: [2, 3, 2]

In [46]: c.count(2)                                                             
Out[46]: 2

 

list.extend(obj) 将obj追加到list的末尾.注意 obb应该是可迭代的对象,否则会报 TypeError: 'xxx' object is not iterable错误

 1 In [49]: c.extend([5])                                                          
 2 
 3 In [50]: c                                                                      
 4 Out[50]: [2, 3, 2, 5]
 5 
 6 # 如果追加的是1个字典,会把字典的key追加到字典的末尾
 7 In [51]: a={"a":6}                                                              
 8 
 9 In [52]: c.extend(a)                                                            
10 
11 In [53]: c                                                                      
12 Out[53]: [2, 3, 2, 5, 'a']

 

错误示例:

 1 In [47]: c                                                                      
 2 Out[47]: [2, 3, 2]
 3 
 4 In [48]: c.extend(5)                                                            
 5 ---------------------------------------------------------------------------
 6 TypeError                                 Traceback (most recent call last)
 7 <ipython-input-48-5a85afdd21bf> in <module>
 8 ----> 1 c.extend(5)
 9 
10 TypeError: 'int' object is not iterable

 

list.index(obj)返回指定元素第1次出现在列表中的位置

1 In [53]: c                                                                      
2 Out[53]: [2, 3, 2, 5, 'a']
3 
4 In [54]:                                                                        
5 
6 In [54]: c.index("a")                                                           
7 Out[54]: 4

 

list.insert(index,obj) 将指定对象插入到列表中指定的位置

注意 :通过insert方法 ,将obj插入到index的位置后,原来在index位置的元素并不会被覆盖,而是会整体往后移。

1 In [56]: c                                                                      
2 Out[56]: [2, 3, 2, 5, 'b']
3 
4 In [58]: c.insert(4,"a")                                                        
5 
6 In [59]: c                                                                      
7 Out[59]: [2, 3, 2, 5, 'a', 'b']

这一点c[3]="c"这种写法是不同的

像上面这样直接通过 = 给元素附值,会把列表中原来的值覆盖掉

In [61]: c                                                                      
Out[61]: [2, 3, 2, 5, 'a', 'b']

In [62]: c.index(5)                                                             
Out[62]: 3

In [63]: c[3]="c"                                                               

In [64]: c                                                                      
Out[64]: [2, 3, 2, 'c', 'a', 'b']

如果指定index超过元素的长度,也不会报错,而是直接将对象插入到列表的末尾,相当于执行了append

 1 In [64]: c                                                                      
 2 Out[64]: [2, 3, 2, 'c', 'a', 'b']
 3 
 4 In [65]: len(c)                                                                 
 5 Out[65]: 6
 6 
 7 In [66]: c.insert(7,"aaa")                                                      
 8 
 9 In [67]: c                                                                      
10 Out[67]: [2, 3, 2, 'c', 'a', 'b', 'aaa']
11 
12 In [68]: c.index("aaa")                                                         
13 Out[68]: 6

list.pop(index)从列表中删除指定元素,返回删除的元素,不指定index则会直接删除最后1个元素

 1 In [69]: c                                                                      
 2 Out[69]: [2, 3, 2, 'c', 'a', 'b', 'aaa']
 3 
 4 #删除下标为0的元素
 5 In [70]: d = c.pop(0)                                                           
 6 
 7 In [71]: d                                                                      
 8 Out[71]: 2
 9 
10 In [72]: c                                                                      
11 Out[72]: [3, 2, 'c', 'a', 'b', 'aaa']
12 
13 #不指定下标,默认删除最后1个元素
14 In [73]: e= c.pop()                                                             
15 
16 In [74]: e                                                                      
17 Out[74]: 'aaa'

 

list.remove(obj)移除列表中 指定的下标元素,无返回值

1 In [79]: c                                                                      
2 Out[79]: [3, 2, 'c', 'a', 'b']
3 
4 In [80]: c.remove(3)
5 
6 In [82]: c                                                                      
7 Out[82]: [2, 'c', 'a', 'b']

list.sort()将列表中的内容进行排序,无返回值

1 In [89]: c                                                                      
2 Out[89]: ['c', 'a', 'b']
3 
4 In [90]: c.sort()                                                               
5 
6 In [91]: c                                                                      
7 Out[91]: ['a', 'b', 'c']

注意 :使用list.sort()方法,要求list中的元素都是同1数据类型,否则会报 这样的错误 :TypeError: '<' not supported between instances of 'xxx' and 'xxx'

In [85]: c                                                                      
Out[85]: [2, 'c', 'a', 'b']

In [86]: c.sort()                                                               
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-86-3b6e9baacecd> in <module>
----> 1 c.sort()

TypeError: '<' not supported between instances of 'str' and 'int'

 



推荐阅读