如何使用remove方法移除二维列表中出现两次的指定元素?
问题描述
在编程练习中,需用remove()方法移除二维列表中的指定数据,平台限制仅能使用remove()、不能通过循环实现,但执行代码时触发如下错误:
Traceback (most recent call last):
File "script.py", line 13, in
customer_data.remove(False)
ValueError: list.remove(x): x not in list
我的代码如下:
first_names = ['Ainsley', 'Ben', 'Chani', 'Depak'] preferred_size = ['Small', 'Large', 'Medium'] preferred_size.append('Medium') print(first_names) print('') print(preferred_size) print('') customer_data = [['Ainsley', 'Small', True],['Ben', 'Large', False],['Chani', 'Medium', True],['Depak', 'Medium', False]] customer_data.remove(False) customer_data[2][2] = False print(customer_data)
问题分析与解决
错误原因
customer_data是二维列表,外层列表的每个元素都是完整的子列表(如['Ben', 'Large', False']),而非单独的False值。调用customer_data.remove(False)时,Python会在外层列表中查找直接等于False的元素,显然不存在匹配项,因此抛出ValueError。
正确实现
如果你的需求是移除第三个元素为False的子列表,需要直接将目标子列表作为remove()的参数:
first_names = ['Ainsley', 'Ben', 'Chani', 'Depak'] preferred_size = ['Small', 'Large', 'Medium'] preferred_size.append('Medium') print(first_names) print('') print(preferred_size) print('') customer_data = [['Ainsley', 'Small', True],['Ben', 'Large', False],['Chani', 'Medium', True],['Depak', 'Medium', False]] # 移除第一个第三个元素为False的子列表 customer_data.remove(['Ben', 'Large', False]) # 移除第二个符合条件的子列表 customer_data.remove(['Depak', 'Medium', False]) customer_data[2][2] = False print(customer_data)
如果需求是修改子列表内的布尔值而非移除子列表,无需调用remove(),直接通过索引修改即可(如你代码最后一行的customer_data[2][2] = False)。
注意:list.remove(x)仅会移除列表中第一个匹配x的元素,若存在多个目标,需多次调用该方法。
内容的提问来源于stack exchange,提问作者Rougejupiter
相关产品推荐
相关产品推荐

