list加法操作
list1 = [1, 2, 3, 4, 5]
list2 = [1, 4, 5]
print(list1+list2) # [1, 2, 3, 4, 5, 1, 4, 5]
list3=list1.append(list2) #append的时候,是将list2看作一个对象,整体打包添加到list1对象中
print(list3) # None 因为append无返回值
print(list1)
[1, 2, 3, 4, 5, [1, 4, 5]]
list4=list1.extend(list2) #使用extend的时候,是将list2看作一个序列,将这个序列和list1序列合并,并放在其后面.可以使用len 进行统计 ,注意 第二个追加的必须是可以进行iterable否则报错,比如: None
print(list4) #None 因为extend无返回值
print(list1) #[1, 2, 3, 4, 5, [1, 4, 5], 1, 4, 5]
list 减法操作
# 方法1
list1 = [1, 2, 3, 4, 5]
list2 = [1, 4, 5]
print(list(set(list1)-set(list2))) # [ 2, 3]
# 注意如果list_tmp = [[1,2],[2,3]],即list里面不是单独的元素组成,而是list,那么set(list_tmp)会出问题
# 方法2
print([i for i in list1 if i in list1 and i not in list2])
list乘法操作
l=[1]*4
print(l) #[1, 1, 1, 1]
#注意一下问题
l = [{'a': 1}] * 4
print(l) [{'a': 1}, {'a': 1}, {'a': 1}, {'a': 1}]
l[0]['a'] = 2
print(l) # [{'a': 2}, {'a': 2}, {'a': 2}, {'a': 2}]
一句话解释就是,*操作符在实现上是复制了值的引用,而不是创建了新的对象。所以上述的list里面,是4个指向同一个dict对象的引用。
*操作符对于不可变对象很安全,但对于可变对象,可能就不是你期望的结果。因为不可变对象是复制值,而可变对象是复制引用。
使用以下代码避免问题:
l = [{'a': 1} for _ in range(4)]
print(l) #[{'a': 1}, {'a': 1}, {'a': 1}, {'a': 1}]
l[0]['a'] = 2
print(l) #[{'a': 2}, {'a': 1}, {'a': 1}, {'a': 1}]
list 除法操作
list1 = [1, 2, 3, 4, 5]
list2 = [1, 4, 5]
list3=zip(list2,list1)
print([a/b for a,b in list3]) # [1, 2, 1]