Python初学者项目练习28--移除列表中的多个元素
一、练习题目
定义一个函数,该函数用于从第一个列表list1中移除所有存在于第二个列表list2中的元素
二、代码
1.初始版本
代码如下:
defremove_number(list1,list2):fori inrange(list1):forj inrange(list2):ifi==j:list1.remove(j)returnlist1 list1=[1,2,5,8,10,8,45,78,99,123,56]list2=[3,6,8,10,78,56]print(remove_number(list1,list2))TypeError: ‘list’ object cannot be interpreted as an integer
问题:range()里传了列表
range()需要的是整数,比如 range(10),而不是 [1, 10]
2.优化版本
代码如下:
defremove_number(list1,list2):fori in list2:ifi in list1:list1.remove(i)returnlist1 list1=[1,2,5,8,10,8,45,78,99,123,56]list2=[3,6,8,10,78,56]print(f"从列表{list1}中移除元素{list2}的结果为:{remove_number(list1, list2)}")输出:
从列表[1, 2, 5, 8, 10, 8, 45, 78, 99, 123, 56]中移除元素[3, 6, 8, 10, 78, 56]的结果为:[1, 2, 5, 8, 45, 99, 123]
问题: list1里面有2个重复元素和list2相同,但是remove只删除了第一个相同的元素
3.优化版本
代码如下:
# 列表表达式 defremove_number(list1,list2):return[ifori in list1ifi not in list2]list1=[1,2,5,8,10,8,45,78,99,123,56]list2=[3,6,8,10,78,56]print(f"从列表{list1}中移除元素{list2}的结果为:{remove_number(list1, list2)}")采用列表表达式
输出:
从列表[1, 2, 5, 8, 10, 8, 45, 78, 99, 123, 56]中移除元素[3, 6, 8, 10, 78, 56]的结果为:[1, 2, 5, 45, 99, 123]
总结
for i in range(起始,终止,步长)
for i in list1
for i in range(len(list1))列表表达式
[输出表达式 for 变量 in 可迭代对象 if 条件]
[i for i in list1 if i not in list2]例如:
result = []
for i in range(5):
result.append(i * 2)换成列表表达式:
result = [i * 2 for i in range(5)]列表常用函数操作
列表常用方法操作
4.1 增加
4.2 删除
4.3 统计查找
4.4 改序对比函数与方法
✅ 函数:
len / max / min / sum / sorted / list / enumerate / zip
✅ 方法:
append / extend / insert / remove / pop / clear / index / count / sort / reverse
