Python中移除列表元素并修改另一列表的问题求解
问题根源
你当前代码没过滤掉J里的32,是因为CB第一个元素[[[]]]的长度是1,len(CB[i])!=0的判断会把它当成有效列表,所以保留了J[0]的32。但这个子列表里只有空列表,属于需要排除的无效项。
修正代码
简洁的列表推导式写法
import numpy as np CB = [[[]], [np.array([9.75016872e-05]), np.array([0.00019793]), np.array([0.0001007])], [np.array([0.0002704])]] J = [32, 1, 35] J_new = [j for cb_sub, j in zip(CB, J) if any(not isinstance(item, list) or len(item) > 0 for item in cb_sub)] print(J_new)
传统循环写法
import numpy as np arJ_new = [] CB = [[[]], [np.array([9.75016872e-05]), np.array([0.00019793]), np.array([0.0001007])], [np.array([0.0002704])]] J = [32, 1, 35] for cb_sub, j in zip(CB, J): # 检查子列表是否包含有效元素 valid = False for item in cb_sub: if not isinstance(item, list) or len(item) != 0: valid = True break if valid: arJ_new.append(j) J_new = arJ_new print(J_new)
逻辑说明
核心判断逻辑是检查CB的子列表元素:只要存在一个元素是numpy数组(不是列表),或是列表但不为空,就认为该子列表有效,保留对应的J元素。这样就能正确排除CB中第一个仅含空列表的子项,输出结果就是期望的[1, 35]。
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

