Python中根据列表C的True元素移除J_new对应元素的问题
问题描述
我有两个列表J_new和C,需要实现:当C中的元素为True时,移除J_new中对应位置的元素。例如,由于C[0]=True,要移除J_new[0]=1。
我的代码
J_new = [1, 9, 15] C=[True, True, False] for i in range(0,len(C)): if(C[i]=='True'): C[i]=[] J_new=J_new[C[i]] print(J_new)
当前输出
[1, 9, 15]
期望输出
[15]
错误分析
- 布尔值判断错误:
C里的元素是布尔类型的True/False,你却用字符串'True'做判断,导致条件永远不触发。 - 索引逻辑错误:把
C[i]改成空列表[]后用它索引J_new是完全无效的操作,Python不允许用空列表做索引。 - 正向循环的隐患:就算条件写对了,正向遍历删除元素会导致列表长度缩短,后续索引指向的元素会错位。
正确解法
解法1:列表推导式(最简洁)
直接筛选出C中对应为False的J_new元素:
J_new = [1, 9, 15] C = [True, True, False] J_new = [j for j, c in zip(J_new, C) if not c] print(J_new) # 输出 [15]
解法2:反向循环删除
如果一定要用循环删除,必须从后往前遍历,避免索引错位:
J_new = [1, 9, 15] C = [True, True, False] # 从最后一个索引开始往前遍历 for i in range(len(C)-1, -1, -1): if C[i]: del J_new[i] print(J_new) # 输出 [15]
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

