python - 为什么 list.remove() 在这个 for 循环中不起作用?
问题描述
我有一个列表列表:
W = [[5.0, 0, 0, 0, 0], [5.0, 0, 0, 0], [0, 0, 0], [5.0, 0, 0, 0], [5.0, 0, 0, 0]]
从 中的每个列表中W
,我想删除零条目。
我尝试了以下方法:
for idx in range(len(W)):
W[idx].remove(0)
print(W)
但它总会回来
[[5.0, 0, 0, 0, 0], [5.0, 0, 0, 0], [0, 0, 0], [5.0, 0, 0, 0], [5.0, 0, 0, 0]]
这里没有任何改变。我知道在迭代对象时无法更改对象,但是由于我不是在迭代W
而是在迭代len(W)
,所以我不明白为什么我的代码不起作用。
我究竟做错了什么?
解决方案
正如 avloss 所说, remove 只会删除第一次出现。做一个列表理解。
for idx in range(len(W)):
W[idx] = [i for i in W[idx] if i != 0]
print(W)
正如@meowgoesthedog 建议的那样,您可以进行整体列表理解:
W = [lst[item for item in lst if item !=0] for lst in W]
推荐阅读
- python - python匹配字符串并将单词添加到行尾
- spring-data-jpa - 将 Oracle Case Statement 转换为 JPQL 或 JPA 存储库查询?
- c++ - 对象创建错误的 C++ 向量
- cordova - 任务 ':app:processDebugGoogleServices' 执行失败,寻找 google-services.json 并没有成功找到它
- mysql - 如何将查询产生的表连接到存储在 mysql 上的过程的另一个临时表中?
- android - 设置中的Android“语音输入”选项丢失
- javascript - 基于嵌套属性过滤数组
- php - 我的 php 文件中的错误我似乎找不到?也许是由ajax引起的?
- python - Pandas:在检查另一列的成员资格时创建 NaN?
- c - C 冒泡排序最大的值变成0