AttributeError: 'list' object has no attribute 'extends' && list详解
拼写错误
是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'