刚学Python的实习生写了个循环,想往列表里加元素,结果把each循环变量一股脑全塞进去了,打印出来发现列表套列表,看了半天才明白append和extend不是一回事。
append就是把一个东西放到末尾
nums = [1, 2]
nums.append(3)
print(nums) # [1, 2, 3]
nums.append([4, 5])
print(nums) # [1, 2, 3, [4, 5]]看清楚,append([4,5])是把整个列表当一个元素塞进去,不是拆开。这正是新手最常踩的坑。想拆开就用extend。
append和extend别搞混
- append:加一个元素,元素是列表就变成嵌套
- extend:加一批元素,把里面的东西一个个摊平进原列表
- 加多个:a.extend([4,5])等于循环append两次,但写法干净
a = [1, 2]
a.extend([3, 4])
print(a) # [1, 2, 3, 4]它改的是原列表,不返回值
append没有返回值,返回的是None。写成nums等于nums.append(3),nums直接变成None,后面再用报错AttributeError。这是第二个大坑,一定要记住原地修改。
同理,列表还能用加号合并,但nums加另一个列表会生成新对象,量大的时候比append慢,循环里拼数据一律用append或者列表推导式。
append不适用于哪些类型
字符串没有append,元组也没有,集合用的是add,字典用update或者直接赋值键。用错类型报AttributeError,很快就能看出来。
一句话取舍:单个加用append,整批摊平用extend,循环里要拼一大坨先建空列表再append,别用加号。